c# regex正則表達式
C# 正則表達式Regex
正則表達式提供了功能強大、靈活而又高效的方法來處理文本。 正則表達式豐富的泛模式匹配表示法使你可以快速分析大量文本,以便:
- 查找特定字符模式。
- 驗證文本以確保它匹配預定義模式(如電子郵件地址)。
- 提取、編輯、替換或刪除文本子字符串。
- 將提取的字符串添加到集合中,以便生成報告。
對于處理字符串或分析大文本塊的許多應用程序而言,正則表達式是不可缺少的工具。
來自微軟官方
1. c#的正則表達式基本構成
使用正則表達式處理文本的中心構件是正則表達式引擎,處理文本至少要求向該正則表達式引擎提供以下兩方面的信息:
- 要在文本中標識的正則表達式模式
- 要為正則表達式模式分析的文本
using System.Text.RegularExpressions;
Regex reg = new Regex(@"\d+");
Match match = reg.Match("a55a");
if (match.Success)
{
Console.WriteLine(match.Value);
}
上面的示例給出了一個基本的正則表達式查找流程。
2. 正則表達式模式
2.1 正則表達式中的定位點
^ 表示匹配出現在字符串開頭
$ 表示匹配出現在字符串末尾,或出現在輸入字符串末尾的 \n 之前
\b表示匹配在字符邊界
\z 匹配僅出現在字符串的末尾,多行字符串僅僅匹配最后一行,不匹配字符串末尾的\n
\Z匹配必須出現在字符串的末尾,或出現在字符串末尾的 \n 之前
\A匹配必須僅出現在字符串的開頭位置(無多行支持)
\G匹配必須從上一個匹配結束的位置開始;如果以前沒有匹配項,則從開始進行匹配的字符串中的位置開始。
2.2 字符類
字符類表示的是一類字符,匹配的時候只要和字符類中的任意一個匹配就是滿足條件
| 字符類 | 描述 | 模式 | 匹配 |
|---|---|---|---|
[character_group] |
匹配 character_group 中的任何單個字符。 默認情況下,匹配區分大小寫。 | [ae] |
"gray" 中的 "a" "lane" 中的 "a" 和 "e" |
[^character_group] |
求反:與不在 character_group 中的任何單個字符匹配。 默認情況下, character_group 中的字符區分大小寫。 | [^aei] |
"reign" 中的 "r"、"g" 和 "n" |
[first-last] |
字符范圍:與從第一個至最后一個的范圍內的任何單個字符匹配。 | [A-Z] |
"AB123" 中的 "A" 和 "B" |
. |
通配符:與除 \n 之外的任何單個字符匹配。 若要匹配文本句點字符(. 或 \u002E),你必須在該字符前面加上轉義符 (\.)。 |
a.e |
"nave" 中的 "ave" "water" 中的 "ate" |
\p{name} |
與 name 指定的 Unicode 通用類別或命名塊中的任何單個字符匹配。 | \p{Lu} \p{IsCyrillic} |
"City Lights" 中的 "C" 和 "L" "ДЖem" 中的 "Д" 和 "Ж" |
\P{name} |
與不在 name 指定的 Unicode 通用類別或命名塊中的任何單個字符匹配。 | \P{Lu} \P{IsCyrillic} |
"City" 中的 "i"、"t" 和 "y" "ДЖem" 中的 "e" 和 "m" |
\w |
與任何單詞字符匹配。 | \w |
"ID A1.3" 中的 "I"、"D"、"A"、"1" 和 "3" |
\W |
與任何非單詞字符匹配。 | \W |
"ID A1.3" 中的 " " 和 "." |
\s |
與任何空白字符匹配。 | \w\s |
"ID A1.3" 中的 "D " |
\S |
與任何非空白字符匹配。 | \s\S |
"int __ctr" 中的 " _" |
\d |
與任何十進制數字匹配。 | \d |
"4 = IV" 中的 "4" |
\D |
與任何不是十進制數的字符匹配。 | \D |
"4 = IV" 中的 " "、"="、" "、"I" 和 "V" |
2.3 分組
分組構造描述了正則表達式的子表達式,通常用于捕獲輸入字符串的子字符串。
| 分組構造 | 描述 | 模式 | 匹配 |
|---|---|---|---|
(subexpression) |
捕獲匹配的子表達式并將其分配到一個從 1 開始的序號中。 | (\w)\1 |
"deep" 中的 "ee" |
(?<name>subexpression) 或 (?'name'subexpression) |
將匹配的子表達式捕獲到一個命名組中。 | (?<double>\w)\k<double> |
"deep" 中的 "ee" |
2.4 數量詞
| 限定符 | 描述 | 模式 | 匹配 |
|---|---|---|---|
* |
匹配上一個元素零次或多次。 | a.*c |
"abcbc" 中的 "abcbc" |
+ |
匹配上一個元素一次或多次。 | "be+" |
"been" 中的 "bee"、"bent" 中的 "be" |
? |
匹配上一個元素零次或一次。 | "rai?" |
"rain" 中的 "rai" |
{n} |
匹配上一個元素恰好 n 次。 | ",\d{3}" |
"1,043.6" 中的 ",043"、"9,876,543,210" 中的 ",876"、",543" 和 ",210" |
{n,} |
匹配上一個元素至少 n 次。 | "\d{2,}" |
"166", "29", "1930" |
{n,m} |
匹配上一個元素至少 n 次,但不多于 m 次。 | "\d{3,5}" |
"166", "17668" "193024" 中的 "19302" |
*? |
匹配上一個元素零次或多次,但次數盡可能少。 | a.*?c |
"abcbc" 中的 "abc" |
+? |
匹配上一個元素一次或多次,但次數盡可能少。 | "be+?" |
"been" 中的 "be"、"bent" 中的 "be" |
?? |
匹配上一個元素零次或一次,但次數盡可能少。 | "rai??" |
"rain" 中的 "ra" |
{n}? |
匹配前面的元素恰好 n 次。 | ",\d{3}?" |
"1,043.6" 中的 ",043"、"9,876,543,210" 中的 ",876"、",543" 和 ",210" |
3. 正則表達式的執行方法
- 通過調用
Regex.IsMatch方法確定輸入文本中是否具有正則表達式模式。 - 通過調用
Regex.Match或Regex.Matches方法檢索匹配正則表達式模式的一個或所有文本匹配項。 - 通過調用
Regex.Replace方法替換匹配正則表達式模式的文本。
作者:hugowu
聯系方式:anuoecust@gmail.com
博文地址:http://www.rzrgm.cn/hugowu-blog/p/17155440.html

浙公網安備 33010602011771號