0

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

"156234   something 567345 another thing 45789 anything"

结果应该是一组数字,具有:

156234, 567345, 45789

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

编辑:这些数字是整数,但是它们也可以像这样出现“156234 567345 另一个 45789 任何 2345”。在这种情况下,我只需要整数,即 156234、567345、45789 而不是 156234、567345、45789、2345。

此外,我不想要的整数将始终以 ex:anything2345 的文本开头。

4

4 回答 4

9

您的正则表达式一切正常,您只需要完成所有匹配即可。

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

foreach (Match match in regex.Matches("156234 something 567345 another thing 45789 anything"))
{
    Console.WriteLine(match.Value);
}
于 2012-11-12T18:54:25.663 回答
6

你想分割字符,而不是数字。使用大写 D

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

来源

于 2012-11-12T18:54:15.720 回答
2

如果 2345 不应该在您修改后的示例字符串中匹配(156234 某事 567345 另一事 45789 任何事2345),您可以使用 Dima 的解决方案,但使用正则表达式:

\b\d+\b

这确保了数字被单词边界包围。

于 2012-11-12T21:13:47.747 回答
0

这在java中。您实际上并不需要正则表达式 .. 只需一个普通的 replaceAll 就可以为您解决问题!:例如:您可以剥离非数字,然后拆分并计算总和。

  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;
}
于 2013-02-11T01:58:50.960 回答