从字符串中获取所有数字的最佳方法[重复]
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 => 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中将字符串[基本上是逗号分隔的数字]转换为整数的最佳方法[重复]