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

C# 從字符串批量提取數字到陣列(正則實現)

     編輯:程式設計綜合問答

需求:從 "p27p p34p" 等字串中提取所有數字(如 27、34),存入陣列供後續查詢使用。最簡潔的做法是使用 Regex.Matches 配合 LINQ。

核心代碼

using System.Text.RegularExpressions;
using System.Linq;

string input = "p27p p34p p100p";
// 提取所有連續數字
int[] ids = Regex.Matches(input, @"\d+")
                 .Cast<Match>()
                 .Select(m => int.Parse(m.Value))
                 .ToArray();
// 結果:[27, 34, 100]

進階:提取帶分隔符的特定模式

// 僅提取 "p" 包圍的數字
int[] ids = Regex.Matches(input, @"(?<=p)\d+(?=p)")
                 .Cast<Match>()
                 .Select(m => int.Parse(m.Value))
                 .ToArray();

舊版 .NET Framework 兼容寫法

List<int> list = new List<int>();
foreach (Match m in Regex.Matches(input, @"\d+")) {
    list.Add(int.Parse(m.Value));
}
int[] ids = list.ToArray();

效能提示

  • 單次提取用 Regex.Matches 即可,避免手寫循環 IndexOf/Substring 易出錯且效能低。
  • 若頻繁調用,將 Regex 實例靜態化並加 RegexOptions.Compiled:
    static readonly Regex NumRegex = new Regex(@"\d+", RegexOptions.Compiled);

此法簡潔、可讀、效能佳,適用於 .NET Core / .NET 5+ 及舊版 Framework。

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