首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C#中使用正則表達式實現高效字符串搜索的完整指南

     編輯:VC 教學

1. 正則表達式簡介

.NET 正則表達式提供強大、靈活、高效的文本處理能力,兼容 Perl 5 語法,並擴展了獨有功能。核心類位於 System.Text.RegularExpressions 命名空間,可供所有 CLR 語言使用。

2. 核心類與用法

Regex:只讀正則表達式


Regex r = new Regex(@"\s2000"); // @ 字面量避免雙重轉義

Match:單次匹配結果


Match m = r.Match("123abc456");
if (m.Success) Console.WriteLine("Position: " + m.Index);

MatchCollection:所有非重疊匹配


MatchCollection mc = r.Matches("123abc4abcd");
for (int i = 0; i < mc.Count; i++) {
    Console.WriteLine(mc[i].Value + " at " + mc[i].Index);
}

GroupCollection / CaptureCollection:分組與捕獲

使用括號 (...) 定義組,Match.Groups 返回組集合,每組含 Captures 序列(受量詞影響可捕獲多次)。


Regex r = new Regex("(Abc)+");
Match m = r.Match("XYZAbcAbcAbcXYZAbcAb");
foreach (Group g in m.Groups) {
    foreach (Capture c in g.Captures)
        Console.WriteLine(c.Value + " at " + c.Index);
}

3. 常用元字符與轉義序列

符號含義示例
^字符串開始^B
$字符串結束X$
.除換行外任意字符i.ation
*前導字符 0 次或多次ra*t
+前導字符 1 次或多次ra+t
?前導字符 0 次或 1 次ra?t
\s空白字符\sa
\S非空白字符\SF
\b單詞邊界ion\b
\B非單詞邊界\BX\B

4. 字符類與範圍

  • [abc]:a 或 b 或 c
  • [a-z]:小寫字母
  • [0-9]+:一個或多個數字(整數)

5. RegexOptions 選項

6. 實戰範例:提取 URI 協議、主機、端口


string pattern = @"\b(\S+)://(\S+)(?::(\S+))?\b";
Regex r = new Regex(pattern);
Match m = r.Match("https://www.example.com:8080/path");
if (m.Success) {
    Console.WriteLine("Proto: " + m.Groups[1].Value);
    Console.WriteLine("Host: " + m.Groups[2].Value);
    Console.WriteLine("Port: " + (m.Groups[3].Success ? m.Groups[3].Value : "default"));
}

非捕獲組 (?:...) 可避免產生多餘組;ExplicitCapture 選項同效。

7. 替換與 Match.Result


string Extend(string url) {
    Regex r = new Regex(@"^(?\w+)://[^/]+?(?:\d+)?/");
    return r.Match(url).Result("${proto}${port}");
}

總結

掌握 Regex、Match、Group、Capture 四大核心類,善用選項與分組捕獲,即能高效完成複雜文本搜索、提取、替換任務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
選項內聯說明
IgnoreCasei忽略大小寫
Multilinem^$ 匹配行首尾
ExplicitCapturen僅捕獲命名/編號組
Compiled-編譯為 MSIL,啟動慢執行快
Singlelines. 匹配換行符
IgnorePatternWhitespacex忽略模式中的空白,允許 # 註釋