c# - Regex MatchCollection 得到太多结果

标签 c# regex

使用 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/

相关文章:

Java 正则表达式非法转义字符错误不会从命令行参数发生

regex - Grepping for the form action= 部分 html 页面

c# - 如何获取管道RunID

c# - 我想获取 ASP.NET MVC 中的部分 url

c# - 如何在 C# Windows 应用程序中使用 RichEdit20W 控件?

java - 正则表达式,如何在第一次失败时中止?

regex - 使用正则表达式表示标识符

java - 用于验证带扩展名的 Windows 和 Linux 路径的正则表达式

c# - 字符串与字符串

c# - ASP.NET MVC 中的数据库上下文和返回动态结果集