2016-08-17 43 views
1

例輸入:" 1 4 2 5 9 "正則表達式由abritrary空格隔開的正整數

求購:"1""4""2""5""9"

使用像

var rgx = new Regex("???"); 
var matches = rgx.Matches(" 1 4 2 5 9 "); 
var nums = new List<int>(); 
foreach(var match in matches) 
    nums.Add(match.Caputre.Value); 
+0

爲什麼正則表達式?字符串是否總是由數字塊和空白字符組成? –

+0

@WiktorStribiżew如果你有比在這裏使用正則表達式更好的建議,請讓我知道。簡單地說,我需要的是從由任意數量的空白分隔的整數串中解析整數。 – user6048670

+0

你的意思是任何空格或文字空格(如你的例子所示)? –

回答

2

如果你是確定只有空格和數字塊,你可以使用LINQ和解析整數與int.Parse

var str = " 1 4 2 5 9 "; 
var res = str.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries) 
    .Select(r => int.Parse(r)) 
    .ToList(); 

如果您還需要一種預先驗證的(以確保您的字符串只包含任何空白和數字塊,你可以使用一個更安全的正則表達式基礎的解決方案:

var res2 = Regex.Matches(str, @"^(?:\s*([0-9]+))+\s*$") 
    .Cast<Match>() 
    .SelectMany(p => p.Groups[1].Captures.Cast<Capture>().Select(m => int.Parse(m.Value))) 
    .ToList(); 

兩個結果:

enter image description here

0

拆分將是一個較慢的方式做到這一點。

使用try比賽(),是這樣的:

var nums = new List<int>(); 
foreach (Match match in Regex.Matches(" 1 4 2 5 9 ", @"\d+")) 
{ 
    nums.Add(Int32.Parse(match.Value)); 
} 

/////////////// 
StringBuilder builder = new StringBuilder(); 
foreach (int nN in nums) 
{ 
    builder.Append(nN).Append(","); 
} 
string result = builder.ToString(); 
Console.WriteLine("{0}", result);