28

有没有比这样做更好的方法来获取诸如“(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());

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

4

5 回答 5

85

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

return new String(input.Where(Char.IsDigit).ToArray());
于 2010-04-14T03:45:44.577 回答
23

你有什么反对Replace吗?

return Regex.Replace(input, @"[^0-9]+", "");
于 2010-04-14T03:49:54.723 回答
10

您需要将/\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
于 2010-04-14T03:48:52.747 回答
6

只需删除所有非数字:

var result = Regex.Replace(input, @"\D", "");
于 2010-04-14T05:45:02.490 回答
0

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

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

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

于 2010-04-14T06:27:01.923 回答