从字符串中提取数字

时间:2012-11-12 18:49:29

标签: c# regex

我需要从这样的字符串中获取所有数字:

"156234   something 567345 another thing 45789 anything"

结果应该是具有以下数字的数字集合:

156234, 567345, 45789

我尝试了@"\d+",但它只会给我156234

编辑:数字是整数,但它们也可能像这样“156234 567345另一件事45789 anything2345”。在这种情况下,我只需要整数,即156234,567345,45789而不是156234,567345,45789,2345。

此外,我不想要的整数前面会有一个ex:anything2345的文本。

4 个答案:

答案 0 :(得分:9)

你的正则表达式一切正常,你只需要通过所有比赛。

Regex regex = new Regex(@"\d+");

foreach (Match match in regex.Matches("156234 something 567345 another thing 45789 anything"))
{
    Console.WriteLine(match.Value);
}

答案 1 :(得分:6)

您希望拆分字符,而不是数字。使用大写D

string[] myStrings = Regex.Split(sentence, @"\D+");

Source

答案 2 :(得分:2)

如果2345不应该与你的修改后的样本字符串匹配(156234 567345另一个东西45789 anything2345),你可以使用Dima的解决方案,但使用正则表达式:

\b\d+\b

这可以确保数字被字边界包围。

答案 3 :(得分:0)

这是java中的。你实际上并不需要一个正则表达式..只是一个正常的替换所有应该为你做的伎俩! :例如:您可以剥离非数字,然后拆分并计算总和。

  public static int getSumOfNumbers(String s) {
    int sum = 0;
    String x = s.replaceAll("\\D+", " ");
    String[] a = x.split(" ");
    for(int i = 0; i < a.length; i++)
         sum += Integer.parseInt(a[i]);
    System.out.println(x + " : and sum is : "+sum);
    return sum;
}