Regex MatchCollection得到的结果太多了

时间:2013-06-10 11:22:16

标签: c# regex

使用C#和Regex我有一个奇怪的情况:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
MatchCollection collection = Regex.Matches(substr, @"[\d]*");

在我的世界中,上面会给我一个包含6个结果的'collection'结果。勉强我的集合包含12个结果,每秒结果都是{}(空)。

我尝试将其重写为:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
Regex regex = new Regex(@"[\d]*");
MatchCollection collection = regex.Matches(substr);

但它给了我完全相同的结果。我在这里缺少什么?

我正在使用.Net framework 4.5,C#

2 个答案:

答案 0 :(得分:7)

我认为问题是你的*量词。它匹配零个或多个字符,这意味着空字符串在技术上是匹配的。您需要使用+量词,如下所示:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645";
MatchCollection collection = Regex.Matches(substr, @"\d+");

// or
Regex regex = new Regex(@"\d+");
MatchCollection collection = regex.Matches(substr);

它将确保仅返回具有一个或多个数字的字符串。

注意,我还删除了[]周围的字符类(\d),因为这里完全没有必要。

进一步阅读:

答案 1 :(得分:1)

不需要正则表达式:

string[] results = substr.Split(',');