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

C# 从字符串中获取所有数字的最佳方法,c#,regex,text-parsing,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());

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

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

您需要使用正则表达式吗

return new String(input.Where(Char.IsDigit).ToArray());
您需要将/\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

你有什么反对的吗


只需删除所有非数字:

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

在perl中,您可以简单地将其改编为C

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

我假设您的字符串是$str。基本思想是用空字符串替换所有非数字,好主意。不过,你在where中漏掉了一点lambda。WaECe= char。iDigigc没有考虑从char级别接近这个。“安东尼,不,我的语法工作得很好,而且比扩展版本的噪音更小。哦,有趣。我没有试过那样做。投票赞成你需要使用正则表达式吗:我喜欢这个答案。然而,在这一个和公认的答案之间,除了一个使用正则表达式和另一个不使用正则表达式之外,还有显著的区别吗?
$str =~ s/[^0-9]//g;