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

C# Regex.Split 返回數組首元素為空:原因與解決方案

     編輯:程式設計綜合問答

Regex.Split 若正則匹配字符串開頭,結果首元素為空字符串。題主模式 A.* (Multiline) 匹配每行開頭的 `A`,導致首行前產生空匹配。

現象復現

var text = @"A111
A222
A333";
var arr = Regex.Split(text, @"A.*", RegexOptions.Multiline);
// arr = ["", "111", "222", "333"]  // 首元素空

解決方案

  1. 改用 Match 收集捕獲組(推薦):
    var matches = Regex.Matches(text, @"^A(.*)$", RegexOptions.Multiline);
    var result = matches.Cast<Match>().Select(m => m.Groups[1].Value).ToArray();
    // ["111", "222", "333"]
    
  2. Split 後過濾空項:
    var arr = Regex.Split(text, @"A.*", RegexOptions.Multiline)
                   .Where(s => !string.IsNullOrEmpty(s)).ToArray();
    
  3. 調整正則不匹配行首:若文本固定以 `A` 開頭,用 (?<=A).* (Lookbehind) 或直接 ^A(.*)$ 捕獲。

跨行匹配補充

若單元內容跨行(如題主補充),用 Singleline (`.` 匹配換行) + 非貪婪:

var pattern = @"A(.*?)(?=A|\z)"; // 非貪婪匹配至下一個 A 或字符串末尾
Regex.Matches(text, pattern, RegexOptions.Singleline)
     .Cast<Match>()
     .Select(m => m.Groups[1].Value)
     .ToArray();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved