學習C#高階程式設計之正規表示式
正規表示式
什麼是正規表示式?
英文RegularExpression,是電腦科學的一個重要概念,她使用一種數學演算法來解決計算機程式中的文字檢索,匹配等問題,正規表示式語言是一種專門用於字串處理的語言。在很多語言中都提供了對它的支援,c#也不例外,它可以幫我們解決下面的問題:
1,檢索:通過正規表示式,從字串中獲取我們想要的部分
2,匹配:判斷給定的字串是否符合正規表示式的過濾邏輯
你可以認為正規表示式表述了一個字串的書寫規則
下面是通過查詢在頭部和尾部進行替換。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace 正規表示式
{
class Program
{
static void Main(string[] args)
{
string s = "I am blue cat.";
//string re = Regex.Replace(s, "^", "開始:");//搜尋開始
//Console.WriteLine(re);
string res = Regex.Replace(s, "$", "結束");//搜尋結尾
Console.WriteLine(res);
Console.ReadKey();
}
}
}
基本語法元字元
正規表示式就是由普通字元以及特殊字元(成為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的一個或多個字串。
@符號
我們經常在正規表示式字串前面加上@字元,這樣不讓編譯器去解析其中的轉義字元,而作為正規表示式的語法(元字元)存在。strings =@"www.baidu.com \n lkjsdflkj";
基本語法元字元
字元 說明
. 匹配除換行符以外的任意字元
\w 匹配字母、數字、下劃線、漢字 (指大小寫字母、0-9的數字、下劃線_)
\W \w的補集 (除“大小寫字母、0-9的數字、下劃線_”之外)
\s 匹配任意空白符 (包括換行符/n、回車符/r、製表符/t、垂直製表符/v、換頁符/f)
\S \s的補集 (除\s定義的字元之外)
\d 匹配數字 (0-9數字)
\D 表示\d的補集 (除0-9數字之外)
在正規表示式中,\是轉義字元.* 是元字元 如果要表示一個\ . *字元的話,需要使用\\ \. \
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace _004_基本語法元字元
{
class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
//bool isMatch = true;//預設標誌位,表示s是一個合法字元密碼(全部都是數字)
//for(int i = 0; i < s.Length; i++)
//{
// if (s[i] < '0' || s[i] > '9')//當前字元不是數字字元
// {
// isMatch = false;
// break;
// }
//}
//if (isMatch)
//{
// Console.WriteLine("是一個合法密碼。");
//}
//else
//{
// Console.WriteLine("不是一個合法密碼。");
//}
//校驗只需要輸入數字
//string pattern = @"^\d*$";//正規表示式 ^表示開頭 \d*表示零個或多個數字 $表示結尾
//bool isMatch = Regex.IsMatch(s, pattern);
string pattern = @"^\W*$";//校驗只允許輸入除大小寫字母、0-9的數字、下劃線_以外的任何字
bool isMatch = Regex.IsMatch(s, pattern);
Console.WriteLine(isMatch);
Console.ReadKey();
}
}
}
反義字元
字元 說明
\W \w的補集 (除“大小寫字母、0-9的數字、下劃線_”之外)
\S \s的補集 (除\s定義的字元之外)
\D 表示\d的補集 (除0-9數字之外)
\B 匹配不是單詞開頭或結束的位置
[ab] 匹配中括號中的字元
[a-c] a字元到c字元之間是字元
[^x] 匹配除了x以外的任意字元
[^adwz] 匹配除了adwz這幾個字元以外的任意字元
//示例:查詢除ahou這之外的所有字元
stringstrFind1 = "I am a Cat!", strFind2 = "My Name's Bluecat!";
Console.WriteLine("除ahou這之外的所有字元,原字元為:"+ strFind1 + "替換後:" + Regex.Replace(strFind1,@"[^ahou]","*"));
Console.WriteLine("除ahou這之外的所有字元,原字元為:"+ strFind2 + "替換後:" + Regex.Replace(strFind2, @"[^ahou]","*"));
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
//[ab] 匹配中括號中的字元
//[a-c] a字元到c字元之間是字元
//[^x] 匹配除了x以外的任意字元
//[^adwz] 匹配除了adwz這幾個字元以外的任意字元
namespace _005_反義字元
{
class Program
{
static void Main(string[] args)
{
string s = "I am a bat man!";
//string pattern = @"[^atou]";//它代表一個字元,除了atou之外的任意一個字串
string pattern = @"[ab]";
string str = Regex.Replace(s, pattern,"*");
Console.WriteLine(str);
Console.ReadKey();
}
}
}
重複描述字元
字元 說明
{n} 匹配前面的字元n次
{n,} 匹配前面的字元n次或多於n次
{n,m} 匹配前面的字元n到m次
? 重複零次或一次
+ 重複一次或更多次
* 重複零次或更多次
示例:校驗輸入內容是否為合法QQ號(備註:QQ號為5-12位數字)
stringisQq1 = "1233", isQq2 = "a1233", isQq3 ="0123456789123", isQq4 = "556878544";
stringregexQq = @"^\d{5,12}$";
Console.WriteLine(isQq1+"是否為合法QQ號(5-12位數字):"+ Regex.IsMatch(isQq1, regexQq));
Console.WriteLine(isQq2+ "是否為合法QQ號(5-12位數字):" + Regex.IsMatch(isQq2, regexQq));
Console.WriteLine(isQq3+ "是否為合法QQ號(5-12位數字):" + Regex.IsMatch(isQq3, regexQq));
Console.WriteLine(isQq4+ "是否為合法QQ號(5-12位數字):" + Regex.IsMatch(isQq4, regexQq));
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
//{n} 匹配前面的字元n次
//{n,} 匹配前面的字元n次或多於n次
//{n,m} 匹配前面的字元n到m次
//? 匹配零次或一次
//+ 匹配一次或更多次
//* 匹配零次或更多次
namespace _006_重複描述字元
{
class Program
{
static void Main(string[] args)
{
string qq1 = "947662512";
string qq2 = "454121451215";
string qq3 = "d23123123213";
string pattern = @"^\d{6,10}$";
Console.WriteLine(Regex.IsMatch(qq1, pattern));
Console.WriteLine(Regex.IsMatch(qq2, pattern));
Console.WriteLine(Regex.IsMatch(qq3, pattern));
Console.ReadKey();
}
}
}
擇一匹配
字元 說明
| 將兩個匹配條件進行邏輯“或”(Or)運算using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
//| 擇一匹配
namespace _007_擇一匹配
{
class Program
{
static void Main(string[] args)
{
//string s = "34((&*dsadas大薩達奧德賽";
//string pattern = @"\d|[a-z]";
//MatchCollection col = Regex.Matches(s, pattern);
//foreach(Match match in col)
//{
// Console.WriteLine(match);//呼叫tostring方法,會輸出match所匹配到的字串
//}
string s = "zhangsan;lisi;wangwu,zhaoliu";
//string pattern = @"[;,.]";
string pattern = @"[;]|[,]|[.]";
string[] resArray = Regex.Split(s, pattern);
foreach(var res in resArray)
{
Console.Write(res+" ");
}
Console.ReadKey();
}
}
}
對正規表示式進行分組
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace _008_對正規表示式進行分組
{
class Program
{
static void Main(string[] args)
{
string inputStr = Console.ReadLine();
//重複多個字元使用(abcd) {n}進行分組限定
string strGroup1 = @"(ab\w{2}){2}"; // == "ab\w{2}ab\w{2}"
Console.WriteLine("分組字元重複兩次替換為5555,結果為:" + Regex.Replace(inputStr, strGroup1, "5555"));
Console.ReadKey();
}
}
}
相關文章
- 學習正規表示式(js、C#)JSC#
- shell高階-----正規表示式
- 05 shell程式設計之正規表示式程式設計
- Qt Creator程式設計之正規表示式QT程式設計
- Go 正規表示式學習Go
- C#高階程式設計六十五天----表示式樹C#程式設計
- shell程式設計(四)| grep正規表示式程式設計
- shell程式設計(四)| sed 正規表示式程式設計
- js加固之正規表示式學習筆記JS筆記
- Python學習筆記|Python之正規表示式Python筆記
- 正規表示式學習和練習
- 如何快速學習正規表示式
- 正規表示式入門學習
- 正規表示式學習筆記筆記
- C#高階程式設計六十六天----表示式樹總結C#程式設計
- 瞭解下C# 正規表示式C#
- 正規表示式例項蒐集,通過例項來學習正規表示式。
- 通過js正規表示式例項學習正規表示式基本語法JS
- 正規表示式學習(2)---字元特性字元
- Python學習筆記 - 正規表示式Python筆記
- java 正規表示式語法學習Java
- Day1-學習筆記-js之正規表示式筆記JS
- python之正規表示式Python
- 正規表示式複習
- JavaScript高階程式設計學習(一)之介紹JavaScript程式設計
- Python學習之物件導向高階程式設計Python物件程式設計
- JavaScript正規表示式進階指南JavaScript
- 正規表示式(初學)
- 理解正規表示式(程式設計師第3期文章)程式設計師
- 【Perl程式設計-6】正規表示式--替換+轉化程式設計
- 從 Vue parseHTML 來學習正規表示式VueHTML
- JavaScript正規表示式學習筆記(一)JavaScript筆記
- 正規表示式re.compile的學習Compile
- js正規表示式基本語法學習JS
- jmeter學習指南之Boundary Extractor和正規表示式提取器JMeter
- 正規表示式之難點
- java正規表示式之 groupJava
- 正規表示式學習筆記(1)-認識正則筆記