通用 正則表達式 C# (.NET)Regex 總結

 
 語法
    1.
new System.Text.RegularExpressions.Regex("\\$\\d{1,2}\\}").Matches(content)

 

    2.
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("\\$\\d{1,2}\\}");
reg.Maches(string);

 

 
 實例:
 1."\\$\\d{1,2}\\}"    以 $開頭包含1-2個數字以}結尾的字符組合
 2.
 
 
說明:
 
 
 
 
1、C#正則表達式符號模式

 

字  符html

描  述正則表達式

\安全

轉義字符,將一個具備特殊功能的字符轉義爲一個普通字符,或反過來多線程

^post

匹配輸入字符串的開始位置lua

$url

匹配輸入字符串的結束位置spa

*線程

匹配前面的零次或屢次的子表達式code

+

匹配前面的一次或屢次的子表達式

?

匹配前面的零次或一次的子表達式

{n}

n是一個非負整數,匹配前面的n次子表達式

{n,}

n是一個非負整數,至少匹配前面的n次子表達式

{n,m}

mn均爲非負整數,其中n<=m,最少匹配n次且最多匹配m

?

當該字符緊跟在其餘限制符(*,+,?,{n},{n,},{nm})後面時,匹配模式儘量少的匹配所搜索的字符串

.

匹配除「\n」以外的任何單個字符

(pattern)

匹配pattern並獲取這一匹配

(?:pattern)

匹配pattern但不獲取匹配結果

(?=pattern)

正向預查,在任何匹配pattern的字符串開始處匹配查找字符串

(?!pattern)

負向預查,在任何不匹配pattern的字符串開始處匹配查找字符串

x|y

匹配xy。例如,‘z|food’能匹配「z」或「food」。‘(z|f)ood’則匹配「zood」或「food」

[xyz]

字符集合。匹配所包含的任意一個字符。例如,‘[abc]’能夠匹配「plain」中的‘a’

[^xyz]

負值字符集合。匹配未包含的任意字符。例如,‘[^abc]’能夠匹配「plain」中的‘p’

[a-z]

匹配指定範圍內的任意字符。例如,‘[a-z]’能夠匹配'a'到'z'範圍內的任意小寫字母字符

[^a-z]

匹配不在指定範圍內的任意字符。例如,‘[^a-z]’能夠匹配不在‘a’~‘z’'內的任意字符

\b

匹配一個單詞邊界,指單詞和空格間的位置

\B

匹配非單詞邊界

\d

匹配一個數字字符,等價於[0-9]

\D

匹配一個非數字字符,等價於[^0-9]

\f

匹配一個換頁符

\n

匹配一個換行符

\r

匹配一個回車符

\s

匹配任何空白字符,包括空格、製表符、換頁符等

 

\S

匹配任何非空白字符

\t

匹配一個製表符

\v

匹配一個垂直製表符。等價於\x0b和\cK

\w

匹配包括下劃線的任何單詞字符。等價於‘'[A-Za-z0-9_]’

\W

匹配任何非單詞字符。等價於‘[^A-Za-z0-9_]’

 

說明:

因爲在正則表達式中「 \ 」、「 ? 」、「 * 」、「 ^ 」、「 $ 」、「 + 」、「(」、「)」、「 | 」、「 { 」、「 [ 」等字符已經具備必定特殊意義,若是須要用它們的原始意義,則應該對它進行轉義,例如希 望在字符串中至少有一個「 \ 」,那麼正則表達式應該這麼寫: \\+ 。

 

2、在C#中,要使用正則表達式類,請在源文件開頭處添加如下語句:
 
using System.Text.RegularExpressions;
 
 
 
3、RegEx類經常使用的方法
 
 
一、靜態Match方法
 
使用靜態Match方法,能夠獲得源中第一個匹配模式的連續子串。
 
靜態的Match方法有2個重載,分別是
 
Regex.Match(string input, string pattern);
Regex.Match(string input, string pattern, RegexOptions options);
 
第一種重載的參數表示:輸入、模式
 
 
 
第二種重載的參數表示:輸入、模式、RegexOptions枚舉的「按位或」組合。
 
RegexOptions枚舉的有效值是:
Complied表示編譯此模式
CultureInvariant表示不考慮文化背景
ECMAScript表示符合ECMAScript,這個值只能和IgnoreCase、Multiline、Complied連用
ExplicitCapture表示只保存顯式命名的組
IgnoreCase表示不區分輸入的大小寫
IgnorePatternWhitespace表示去掉模式中的非轉義空白,並啓用由#標記的註釋
Multiline表示多行模式,改變元字符^和$的含義,它們能夠匹配行的開頭和結尾
None表示無設置,此枚舉項沒有意義
RightToLeft表示從右向左掃描、匹配,這時,靜態的Match方法返回從右向左的第一個匹配
Singleline表示單行模式,改變元字符.的意義,它能夠匹配換行符
 
注意:Multiline在沒有ECMAScript的狀況下,能夠和Singleline連用。Singleline和Multiline不互斥,可是和ECMAScript互斥。
 
 
二、靜態的Matches方法
 
這個方法的重載形式同靜態的Match方法,返回一個MatchCollection,表示輸入中,匹配模式的匹配的集合。
 
 
三、靜態的IsMatch方法
 
此方法返回一個bool,重載形式同靜態的Matches,若輸入中匹配模式,返回true,不然返回false。
能夠理解爲:IsMatch方法,返回Matches方法返回的集合是否爲空。
 
 
4、RegEx類的實例
 

1.字符串替換

例如我想把以下格式記錄中的NAME值修改成WANG

string line="ADDR=1234;NAME=ZHANG;PHONE=6789";

Regex reg = new Regex("NAME=(.+);");

string modified = reg.Replace(line, "NAME=WANG;");

修改後的字符串爲 ADDR=1234;NAME=WANG;PHONE=6789

 

2.字符串匹配

例如我想提取剛纔那條記錄中的NAME值

Regex reg = new Regex("NAME=(.+);");

Match match=reg.Match(line);

string value=match.Groups[1].Value;

 

三、Match實例3

文本中含有"speed=30.2mph",須要提取該速度值,可是速度的單位多是公制也多是英制,mph,km/h,m/s都有可能;另外先後可能有空格。

string line="lane=1;speed=30.3mph;acceleration=2.5mph/s";

Regex reg=new Regex(@"speed\s*=\s*([\d\.]+)\s*(mph|km/h|m/s)*");

Match match=reg.Match(line);

那麼在返回的結果中match.Groups[1].Value將含有數值,而match.Groups[2].Value將含有單位。

 

四、再好比,解碼gps的GPRMC字符串,只需

Regex reg = new Regex(@"^\$GPRMC,[\d\.]*,[A|V],(-?[0-9]*\.?[0-9]+),([NS]*),(-?[0-9]*\.?[0-9]+),([EW]*),.*");

就能夠得到經度、緯度值,而之前須要幾十行代碼。

 

5、System.Text.RegularExpressions命名空間的說明

 

該名稱空間包括8個類,1個枚舉,1個委託。他們分別是:

 

Capture: 包含一次匹配的結果; CaptureCollection: Capture的序列; Group: 一次組記錄的結果,由Capture繼承而來; GroupCollection:表示捕獲組的集合 Match: 一次表達式的匹配結果,由Group繼承而來; MatchCollection: Match的一個序列; MatchEvaluator: 執行替換操做時使用的委託; Regex:編譯後的表達式的實例。 RegexCompilationInfo:提供編譯器用於將正則表達式編譯爲獨立程序集的信息 RegexOptions 提供用於設置正則表達式的枚舉值 Regex類中還包含一些靜態的方法: Escape: 對字符串中的regex中的轉義符進行轉義; IsMatch: 若是表達式在字符串中匹配,該方法返回一個布爾值; Match: 返回Match的實例; Matches: 返回一系列的Match的方法; Replace: 用替換字符串替換匹配的表達式; Split: 返回一系列由表達式決定的字符串; Unescape:不對字符串中的轉義字符轉義。

 
6、返回結果MatchCollection命名空間的說明
 利用Match類和MatchCollection類,能夠得到經過一個正則表達式實現的每一次匹配中的細節。Match類表示一次匹配,而MatchCollection類是一個Match對象的集合,其中每個對象都表明了一次成功的匹配。咱們須要使用Regex對象的()或Matches()方法來檢索匹配。
 
1.Match類的一些實用方法
NextMatch()-----返回一個新的Match對象,他帶有下一次匹配的結果。從上一次匹配結束的位置開始執行(最後一個匹配字符的下一個字符)。
Result()----------返回傳遞的替換模式的展開式。和下一章所述的分組一塊兒使用。它將對全部不一樣正則表達式的替換模式進行分組,並做爲一個總體返回.
Synchronized()---返回一個Match實例,等價於一個能夠在多線程應用程序中的多線程間安全共享的實例。
 
2.Match類的一些實用屬性
Captures------返回一個捕獲對象集合,每一個對象表明捕獲組所匹配的每一次捕獲。分組和捕獲將在下一章中介紹。
Groups--------返回一個分組對象集合,每一個對象表明被正則表達式匹配的每個Regex組。
Index--------在輸入字符串中第一個匹配字符的位置。
Length------匹配的長度
Success----根據匹配是否成功
Value--------從輸入字符串中得到匹配的子串
 
   最後學些MatchCollection類。使用Regex.Matches()方法,能夠獲得MatchCollection對象的一個引用。這個集合類將包含分別表明每一次正則表達式匹配的Match對象。他在處理屢次匹配時尤爲有用,並且能夠代替Match.NextMatch()方法。
   MatchCollection類有兩個有用的屬性Count和Item。Count返回匹配的個數,Item容許經過下標或者使用foreach循環訪問集合中的每個Match對象。
   要獲得一個MatchCollection,須要使用Regex.Matches()方法
相關文章
相關標籤/搜索