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

C# 從多行字串中擷取指定行並用正則取得 ID 後 10 碼數字

     編輯:程式設計疑難解答

在 C# 處理日誌、報表或結構化文本時,常需「先定位到特定行,再從該行擷取特定模式的資料」。本文示範如何分割多行字串、取得第 100 行(索引 99),並使用正則表達式提取 id 後緊鄰的 10 位數字。

完整程式碼範例

string rawText = "...您的多行字串內容...";

// 1. 分割行 (支援 Windows \r\n、Linux \n、Mac \r)
string[] lines = rawText.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);

// 2. 邊界檢查:確保至少有 100 行
if (lines.Length >= 100) {
    string targetLine = lines[99]; // 第 100 行 (索引 99)

    // 3. 正則匹配:id 後面連續 10 位數字
    // (?<=id) 為正向顧後斷言,不消耗字元,確保緊接在 id 之後
    // \d{10} 匹配恰好 10 位數字
    string pattern = @"(?<=id)\d{10}";
    Match match = Regex.Match(targetLine, pattern);

    if (match.Success) {
        string result = match.Value; // 取得 10 位數字字串
        Console.WriteLine($"擷取結果: {result}");
    } else {
        Console.WriteLine("該行不符合模式或無 10 位數字");
    }
} else {
    Console.WriteLine("行數不足 100 行");
}

關鍵點解析

1. 多平台換行符分割

使用 new[] { "\r\n", "\r", "\n" } 而非單一 "\r\n",可相容 Windows/Linux/Mac 產生的文本檔案。

2. 正則表達式細節

  • (?<=id):正向顧後斷言,只檢查前方是否為 id,匹配結果不包含 id 本身。
  • \d{10}:匹配恰好 10 位數字。若需「至少 10 位」可用 \d{10,}。
  • 若 id 可能為大寫或混合大小寫,可加 RegexOptions.IgnoreCase。

3. 替代方案:Substring 配合 IndexOf

若不想用正則,且格式極度固定(如 id1234567890 固定前綴),可用:

int idx = targetLine.IndexOf("id");
if (idx >= 0 && idx + 2 + 10 <= targetLine.Length) {
    string result = targetLine.Substring(idx + 2, 10); // 跳過 "id" 取 10 碼
    // 建議再驗證 result.All(char.IsDigit)
}

常見坑點提醒

  • 行數不足:務必先檢查 lines.Length,避免索引越界。
  • 多個匹配:若一行有多組 idxxxxxxxxxx,Regex.Match 只取第一組;需全部請用 Regex.Matches 迭代。
  • 空白字元干擾:若格式為 id: 1234567890 或 id = 1234567890,模式需調整為 (?<=id\s*[:=]\s*)\d{10}。

總結

「分割行 → 取目標行 → 正則擷取」是處理結構化文本的標準套路。善用 Split 多重分隔符與 Regex 斷言語法,能以極少程式碼穩健完成複雜擷取任務。

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