从字符串中获取所有数字的最佳方法[重复]

Posted

技术标签:

【中文标题】从字符串中获取所有数字的最佳方法[重复]【英文标题】:Best way to get all digits from a string [duplicate] 【发布时间】:2011-02-07 17:58:56 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

+1,好主意。不过,您在 where 中遗漏了一些 lambda。 .Where(c =&gt; Char.IsDigit(c)) 没有考虑从 char 级别接近这个。 @Anthony 不,我的语法工作正常,并且比扩展版本更“嘈杂”。 哦,有趣。我没有这样尝试过。 支持“你需要使用正则表达式吗”:D【参考方案2】:

你有反对Replace的东西吗?

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

【讨论】:

【参考方案3】:

您需要将/\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

【讨论】:

我喜欢这个答案。但是,在这个答案和接受的答案之间,除了一个使用正则表达式而另一个没有之外,是否存在显着差异?【参考方案4】:

只需删除所有非数字:

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

【讨论】:

【参考方案5】:

在 perl 中(您可以将其改编为 C#)只需这样做

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

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

【讨论】:

以上是关于从字符串中获取所有数字的最佳方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从输入中获取数字的最佳方法?

在PHP中将字符串[基本上是逗号分隔的数字]转换为整数的最佳方法[重复]

根据字符的字符从句子数组中删除重复句子的最佳方法,空格无关紧要

从数字字典中获取最高值作为字符串[重复]

在 UNIX 文件系统中查找数值的最佳方法 [重复]

从Android中的字符串中删除小数点和数字[重复]