我正在尝试在一个字符串中选择多个匹配项,如下所示:
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/