从字符串中获取所有数字的最佳方法

时间:2010-04-14 03:36:45

标签: c# regex text-parsing

有没有更好的方法来获取一个字符串,如“(123)455-2344”并从中得到“1234552344”而不是这样做:

var matches = Regex.Matches(input, @"[0-9]+", RegexOptions.Compiled);

return String.Join(string.Empty, matches.Cast<Match>()
                                .Select(x => x.Value).ToArray());

也许一个正则表达式模式可以在一次匹配中完成它?我似乎无法创造一个来实现这一目标。

5 个答案:

答案 0 :(得分:75)

您需要使用正则表达式吗?

return new String(input.Where(Char.IsDigit).ToArray());

答案 1 :(得分:20)

您是否有针对Replace的内容?

return Regex.Replace(input, @"[^0-9]+", "");

答案 2 :(得分:8)

您希望将/\D/(非数字)替换为''(空字符串)

Regex r = new Regex(@"\D");
string s = Regex.Replace("(123) 455-2344", r, "");

或者更简洁:

string s = Regex.Replace("(123) 455-2344", @"\D",""); //return only numbers from string

答案 3 :(得分:4)

只需删除所有非数字:

var result = Regex.Replace(input, @"\D", "");

答案 4 :(得分:0)

在perl中(您可以将其调整为C#)只需执行

$str =~ s/[^0-9]//g; 

我假设你的字符串在$ str中。基本思想是用''(即空字符串)替换所有非数字