6

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

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

在我的世界里,上面会给我一个包含 6 个结果的“集合”结果。奇怪的是,我的集合包含 12 个结果,并且每个第二个结果都是 {}(空)。

我尝试将其重写为:

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

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

我正在使用 .Net 框架 4.5,C#

4

2 回答 2

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因为这里完全没有必要。

延伸阅读:

于 2013-06-10T11:23:05.727 回答
1

不需要正则表达式:

string[] results = substr.Split(',');
于 2013-06-10T11:49:30.103 回答