c# - 正则表达式跳过匹配

标签 c# regex

我正在尝试在一个字符串中选择多个匹配项,如下所示:

123
blah
END
45
blah
END

理想情况下,我希望它返回 2 个以数字序列开头并以 END 字符串结尾的匹配项。我正在使用以下内容:

Regex splitter = new Regex(@"^\d{2,3}(.*)END", RegexOptions.Singleline);
foreach (Match res in splitter.Matches(content))
{
   Console.WriteLine(res.ToString());
}

但是上面的模式在一次匹配中返回了整个输入字符串。我觉得这与“单线”选项有关。我做错了什么?

最佳答案

* 量词更改为惰性形式(使用 (.*?) 语法)。目前它尝试尽可能匹配字符串中的 许多 符号 - 并且成功地做到了这一点,当然,因为您有几个以 END 结尾的 block 。

添加 ? 后,引擎将尝试使用尽可能少的 符号匹配模式,完成 (.*?) 匹配就在它遇到的第一个 END 之前。

关于c# - 正则表达式跳过匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18603830/

相关文章:

javascript - 使用javascript查找并删除所有出现的短代码

c# - 事件溯源——我们应该只将对象或所有对象值的变化保存到事件存储中吗?

c# - 将数据传递给 startup.cs

c# - 帮助优化这个linq语句

c# - 可以将 Guid 作为 asp.net mvc 3 Controller 操作中的可选参数吗?

regex - 如何找到以 ".html"结尾但文件名中没有 ".bin"的文件?

javascript - javascript正则表达式中回车、换行和多个空格的匹配

ruby - 如何在 Swift 中创建类似于 Ruby 中的扫描的函数

正则表达式比较

c# - 如何使用 Azure Mgmt SDK Fluent 获取端点统计信息和危险端点列表