使用 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 Framework 4.5,C#
最佳答案
我认为问题出在您的 *
量词上。它匹配零个或多个字符,这意味着空字符串在技术上是一个匹配项。您需要使用 +
量词,如下所示:
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
周围的字符类 ([]
),因为它在这里完全没有必要。
进一步阅读:
关于c# - Regex MatchCollection 得到太多结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17022726/