NET 規則運算式
文章推薦指數: 80 %
當您從清單產生信封標籤時,如果不想包括稱謂,就可以使用規則運算式來移除稱謂,如下列範例所示。
C# 複製. using System; using ...
跳到主要內容
已不再支援此瀏覽器。
請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。
下載MicrosoftEdge
其他資訊
目錄
結束焦點模式
語言
閱讀英文
儲存
目錄
閱讀英文
儲存
Twitter
LinkedIn
Facebook
電子郵件
目錄
.NET規則運算式
發行項
06/23/2022
14位參與者
本文內容
規則運算式提供功能強大、彈性且有效率的方法來處理文字。
正則運算式的廣泛模式比對標記法可讓您快速剖析大量的文字,以:
尋找特定的字元模式。
驗證文字以確保其符合預先定義的模式,(例如電子郵件地址)。
擷取、編輯、取代或刪除文字子字串。
將擷取的字串新增至集合,以產生報表。
對許多處理字串或剖析大型文字區塊的應用程式而言,規則運算式是不可或缺的工具。
正則運算式的運作方式
使用規則運算式來處理文字的核心是規則運算式引擎,以.NET中的System.Text.RegularExpressions.Regex物件來表示。
使用規則運算式來處理文字時,至少需要提供規則運算式引擎以及下列兩個資訊項目:
要在文字中識別的規則運算式模式。
在.NET中,規則運算式模式是以特殊的語法或語言來定義,其相容於Perl5規則運算式,並新增一些其他功能,例如由右至左比對。
如需詳細資訊,請參閱規則運算式語言-快速參考。
要為規則運算式模式剖析的文字。
Regex類別的方法可讓您執行下列作業:
呼叫Regex.IsMatch方法,以判定規則運算式模式是否出現在輸入文字中。
如需使用IsMatch方法來驗證文字的範例,請參閱如何:確認字串是否為有效的電子郵件格式。
呼叫Regex.Match或Regex.Matches方法,以擷取符合規則運算式模式的所有文字。
前一個方法會傳回System.Text.RegularExpressions.Match物件,提供相符文字的相關資訊。
後一個方法會傳回MatchCollection物件,其中針對在所剖析文字中找到的每個相符項目,各包含一個System.Text.RegularExpressions.Match物件。
呼叫Regex.Replace方法,以取代符合規則運算式模式的文字。
如需使用Replace方法來變更日期格式,以及移除字串中無效字元的範例,請參閱如何:從字串中刪除無效的字元和如何:變更日期格式。
如需規則運算式物件模型概觀,請參閱規則運算式物件模型。
如需規則運算式語言的詳細資訊,請參閱規則運算式語言-快速參考,或下載並列印下列其中一本小手冊:
Word(.docx)格式的快速參考
PDF(.pdf)格式的快速參考
規則運算式範例
String類別包含數種字串搜尋和取代方法,可供您在大型字串中尋找常值字串時使用。
當您想要在大型字串中尋找數個子字串時,或是當您想要識別字串中的模式時,規則運算式最為好用,如下列範例所示。
警告
使用System.Text.RegularExpressions來處理不受信任的輸入時,請傳遞逾時。
惡意使用者可以提供輸入來RegularExpressions造成拒絕服務攻擊。
ASP.NETCore使用RegularExpressions逾時的架構API。
提示
System.Web.RegularExpressions命名空間包含一些規則運算式物件,這些物件會實作預先定義的規則運算式模式,以用於剖析來自HTML、XML和ASP.NET文件的字串。
例如,TagRegex類別會識別字串中的開始標記,而CommentRegex類別會識別字串中的ASP.NET註解。
範例1:取代子字串
假設郵寄清單包含的名稱有時候會包括稱謂(Mr.、Mrs.、Miss或Ms.)以及姓名。
當您從清單產生信封標籤時,如果不想包括稱謂,就可以使用規則運算式來移除稱謂,如下列範例所示。
usingSystem;
usingSystem.Text.RegularExpressions;
publicclassExample
{
publicstaticvoidMain()
{
stringpattern="(Mr\\.?|Mrs\\.?|Miss|Ms\\.?)";
string[]names={"Mr.HenryHunt","Ms.SaraSamuels",
"AbrahamAdams","Ms.NicoleNorris"};
foreach(stringnameinnames)
Console.WriteLine(Regex.Replace(name,pattern,String.Empty));
}
}
//Theexampledisplaysthefollowingoutput:
//HenryHunt
//SaraSamuels
//AbrahamAdams
//NicoleNorris
ImportsSystem.Text.RegularExpressions
ModuleExample
PublicSubMain()
DimpatternAsString="(Mr\.?|Mrs\.?|Miss|Ms\.?)"
Dimnames()AsString={"Mr.HenryHunt","Ms.SaraSamuels",_
"AbrahamAdams","Ms.NicoleNorris"}
ForEachnameAsStringInnames
Console.WriteLine(Regex.Replace(name,pattern,String.Empty))
Next
EndSub
EndModule
'Theexampledisplaysthefollowingoutput:
'HenryHunt
'SaraSamuels
'AbrahamAdams
'NicoleNorris
規則運算式模式(Mr\.?|Mrs\.?|Miss|Ms\.?)會比對所出現的任何"Mr"、"Mr."、"Mrs"、"Mrs."、"Miss"、"Ms或"Ms."。
呼叫Regex.Replace方法會將相符的字串取代為String.Empty;換句話說,就是將其從原始字串中移除。
範例2:識別重複的字組
不小心重複文字是作者常犯的錯誤。
規則運算式可用來識別重複的文字,如下列範例所示。
usingSystem;
usingSystem.Text.RegularExpressions;
publicclassClass1
{
publicstaticvoidMain()
{
stringpattern=@"\b(\w+?)\s\1\b";
stringinput="Thisthisisaniceday.Whataboutthis?Thistastesgood.Isawaadog.";
foreach(MatchmatchinRegex.Matches(input,pattern,RegexOptions.IgnoreCase))
Console.WriteLine("{0}(duplicates'{1}')atposition{2}",
match.Value,match.Groups[1].Value,match.Index);
}
}
//Theexampledisplaysthefollowingoutput:
//Thisthis(duplicates'This')atposition0
//aa(duplicates'a')atposition66
ImportsSystem.Text.RegularExpressions
ModulemodMain
PublicSubMain()
DimpatternAsString="\b(\w+?)\s\1\b"
DiminputAsString="Thisthisisaniceday.Whataboutthis?Thistastesgood.Isawaadog."
ForEachmatchAsMatchInRegex.Matches(input,pattern,RegexOptions.IgnoreCase)
Console.WriteLine("{0}(duplicates'{1}')atposition{2}",_
match.Value,match.Groups(1).Value,match.Index)
Next
EndSub
EndModule
'Theexampledisplaysthefollowingoutput:
'Thisthis(duplicates'This')atposition0
'aa(duplicates'a')atposition66
規則運算式模式\b(\w+?)\s\1\b可解譯如下:
模式
解譯
\b
從字緣開始。
(\w+?)
比對一或多個字元,但字元數愈少愈好。
這些一起構成可稱之為\1的群組。
\s
比對空白字元。
\1
比對等同於名為\1之群組的子字串。
\b
比對字邊界。
呼叫Regex.Matches方法時,規則運算式選項設為RegexOptions.IgnoreCase。
因此,比對作業不區分大小寫,而且此範例會將子字串"Thisthis"視為重複。
輸入字串包含子字串「this?This"。
不過,因為中間有標點符號,所以不會將其視為重複。
範例3:動態建置區分文化特性的正則運算式
下列範例說明規則運算式結合.NET全球化功能所提供的彈性,功能有多麼強大。
它會使用NumberFormatInfo物件來判定系統目前文化特性中的幣值格式,然後利用該資訊動態建構可從文字擷取幣值的規則運算式。
針對每個比對,它會擷取僅包含數值字串的子群組,將其轉換成Decimal值,並計算執行總計。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Globalization;
usingSystem.Text.RegularExpressions;
publicclassExample
{
publicstaticvoidMain()
{
//Definetexttobeparsed.
stringinput="Officeexpenseson2/13/2008:\n"+
"Paper(500sheets)$3.95\n"+
"Pencils(boxof10)$1.00\n"+
"Pens(boxof10)$4.49\n"+
"Erasers$2.19\n"+
"Inkjetprinter$69.95\n\n"+
"TotalExpenses$81.58\n";
//Getcurrentculture'sNumberFormatInfoobject.
NumberFormatInfonfi=CultureInfo.CurrentCulture.NumberFormat;
//Assignneededpropertyvaluestovariables.
stringcurrencySymbol=nfi.CurrencySymbol;
boolsymbolPrecedesIfPositive=nfi.CurrencyPositivePattern%2==0;
stringgroupSeparator=nfi.CurrencyGroupSeparator;
stringdecimalSeparator=nfi.CurrencyDecimalSeparator;
//Formregularexpressionpattern.
stringpattern=Regex.Escape(symbolPrecedesIfPositive?currencySymbol:"")+
@"\s*[-+]?"+"([0-9]{0,3}("+groupSeparator+"[0-9]{3})*("+
Regex.Escape(decimalSeparator)+"[0-9]+)?)"+
(!symbolPrecedesIfPositive?currencySymbol:"");
Console.WriteLine("Theregularexpressionpatternis:");
Console.WriteLine(""+pattern);
//Gettextthatmatchesregularexpressionpattern.
MatchCollectionmatches=Regex.Matches(input,pattern,
RegexOptions.IgnorePatternWhitespace);
Console.WriteLine("Found{0}matches.",matches.Count);
//Getnumericstring,convertittoavalue,andaddittoListobject.
List
此規則運算式模式可解譯如下:
模式
解譯
\$
在輸入字串中尋找單獨出現的貨幣符號($)。
規則運算式模式字串包含反斜線,表示貨幣符號要解譯為字面意義,而不是規則運算式錨點。
(單$一符號會指出正則運算式引擎應該嘗試在字串結尾開始比對。
)為了確保目前文化特性的貨幣符號不會誤譯為正則運算式符號,範例會呼叫Regex.Escape方法來逸出字元。
\s*
尋找出現零或多次的空格字元。
[-+]?
尋找出現一或多次的正號或負號。
([0-9]{0,3}(,[0-9]{3})*(\.[0-9]+)?)
此運算式外面括號將其定義成擷取群組或子運算式。
如果找到相符項目,從Group屬性傳回之GroupCollection物件中的第二個Match.Groups物件,擷取此部分比對字串的相關資訊。
(集合中的第一個項目代表整個比對。
)
[0-9]{0,3}
尋找出現零到三次的十進位數字0到9。
(,[0-9]{3})*
尋找出現零或多次、後面接三個十進位數字的群組分隔符號。
\.
尋找單次出現的十進位分隔符號。
[0-9]+
尋找一或多個十進位數字。
(\.[0-9]+)?
尋找出現零或一次、後接至少一個十進位數字的十進位分隔符號。
如果在輸入字串中找到上述每個子模式,則比對成功,並且會將包含此比對相關資訊的Match物件加入至MatchCollection物件。
相關主題
標題
說明
規則運算式語言-快速參考
提供您可以用來定義規則運算式之字元、運算子和建構組合的資訊。
規則運算式物件模型
提供資訊和程式碼範例,說明如何使用規則運算式類別。
規則運算式行為的詳細資訊
提供.NET規則運算式之功能和行為的相關資訊。
在VisualStudio中使用正則運算式
參考
System.Text.RegularExpressions
System.Text.RegularExpressions.Regex
規則運算式-快速參考(以Word格式下載)
規則運算式-快速參考(以PDF格式下載)
本文內容
延伸文章資訊
- 1正規表示式- 線上產生器
跨越換行符號 尋找所有符合項目. 產生的正規表示式. //. 本正規表示式的意義為:. 比對字串中是否包含. 巨匠電腦永和分校馬世驊老師編輯請使用Chrome或Firefox瀏覽.
- 2NET 規則運算式
當您從清單產生信封標籤時,如果不想包括稱謂,就可以使用規則運算式來移除稱謂,如下列範例所示。 C# 複製. using System; using ...
- 3Txt2re - 正規表示式生成工具| InspireGate 派克空間
於是,你可以點擊那些花綠格子間的鏈接來組織你的正規表達式。 ... ColdFusion C C++ Ruby VB VBScript J#.net C#.net C++.net VB.net ...
- 4Regex Tester線上模擬正規化表示式的工具,快速檢查以及驗證 ...
如果想要知道這個表示式是怎麼形成的,只需要將滑鼠移動至Regular Expression任一個地方上就會自動解釋給你看!另外有吻合的文字答案,也可以將滑鼠移至吻合的答案上,就 ...
- 5規則運算式中的字元類別- .NET - Microsoft Docs
範例將使用子運算式 [A-Z] 表示從A 到Z 的大寫字母範圍。 C# ... see the "ECMAScript Matching Behavior" section in Regular...