首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 使用正則表達式提取字串中 'a' 與 'c' 之間的子字串

     編輯:程式設計綜合問答

需求:給定字串 "abcdanmcadedcdeefako",提取字母 a 與 c 之間的內容,結果為 ["b", "nm", "ded"]。使用正則表達式的「零寬斷言」可優雅解決。

核心正則:(?<=a)[^ac]*(?=c)

  • (?<=a):正向後顧斷言,匹配位置前必須是 a(不消耗字符)。
  • [^ac]*:匹配任意非 a、非 c 的字符(貪婪匹配)。
  • (?=c):正向前瞻斷言,匹配位置後必須是 c(不消耗字符)。

完整代碼示例

string input = "abcdanmcadedcdeefako";
// 區分大小寫:Regex reg = new Regex("(?<=a)[^ac]*(?=c)");
// 忽略大小寫:
Regex reg = new Regex("(?i)(?<=a)[^ac]*(?=c)");
MatchCollection matches = reg.Matches(input);
foreach (Match m in matches) {
    Console.WriteLine(m.Value); // 輸出: b, nm, ded
}

為何不用 Split?

Split 只能按單一分隔符分割,無法處理「左邊界是 a、右邊界是 c」這類雙邊界提取場景。正則斷言精確定位邊界且不包含邊界字符,最適合此需求。

擴展:提取包含邊界

若需保留 a、c,改用捕獲組:(a[^ac]*c),取 Groups[1].Value。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved