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

Chr*_*sic 24 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());
Run Code Online (Sandbox Code Playgroud)

也许一个正则表达式模式可以在一场比赛中做到这一点?我似乎无法创造一个来实现这一目标.

Mat*_*ton 77

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

return new String(input.Where(Char.IsDigit).ToArray());
Run Code Online (Sandbox Code Playgroud)

  • @Anthony不,我的语法工作得很好,并且比扩展版本更"吵". (10认同)
  • +1,好主意.不过,你在里面遗漏了一些lambda.`.在哪里(c => Char.IsDigit(c))` (4认同)
  • Upvote为"你需要使用正则表达式":D (3认同)

Ala*_*ore 21

你有什么反对的Replace吗?

return Regex.Replace(input, @"[^0-9]+", "");
Run Code Online (Sandbox Code Playgroud)


mač*_*ček 9

你想/\D/''(空字符串)替换(非数字)

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

或者更简洁:

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


Kon*_*rin 6

只需删除所有非数字:

var result = Regex.Replace(input, @"\D", "");
Run Code Online (Sandbox Code Playgroud)