Skip to main content
 首页 » 编程设计

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

2024年02月01日27yxwkf

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

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 之前。