2017-05-19 61 views
0

一段时间我试图找到合适的正则表达式如下字符串中的.后提取号码后得到的数字。例如,第一行应返回并排列1 1 1 1 1,第二行应返回2 1 0 1 2。我似乎无法找到正确的正则表达式来实现这一点。任何帮助,将不胜感激。正则表达式在字符串

line = 0.1, 1.1, 2.1, 3.1, 4.1   // payline 0 
line = 0.2, 1.1, 2.0, 3.1, 4.2   // payline 1 

到目前为止,我有下面的代码,但它只是返回所有的数字在叮刺来代替。例如,第一线返回0 1 1 1 2 1 3 1 4 1 0和第二返回0 2 1 1 2 0 3 1 4 2 1

foreach (var line in Paylines) 
{ 
    int[] lines = (from Match m in Regex.Matches(line.ToString(), @"\d+") 
            select int.Parse(m.Value)).ToArray(); 

    foreach (var x in lines) 
    { 
     Console.WriteLine(x.ToString());   
    } 
} 
+0

使用String.Split? –

+0

谢谢,寻求帮助。我想过走这样一条路,但希望使用正则表达式,而不是 – Eni

+0

\来解决它。(? \ d +?) –

回答

4

您可以使用基于回顾后发正则表达式的解决方案:

@"(?<=\.)\d+" 

它1+数字的小数点后场没有放置点成匹配值。

regex demo

在C#中,你可以使用

var myVals = Regex.Matches(line, @"(?<=\.)\d+", RegexOptions.ECMAScript) 
     .Cast<Match>() 
     .Select(m => int.Parse(m.Value)) 
     .ToList(); 

C# demo

RegexOptions.ECMAScript选项通过\d只匹配[0-9]范围和avoid matching other Unicode digits范围内的ASCII数字。