首页 > 解决方案 > 在第一场比赛后停止 Regex positive Lookbehind

问题描述

感谢 Wiktor Stribiżew 回答了我关于从配对大括号中提取数据的第一个问题并指出了重复的问题:Regex to get string between curly brackets

我想做的也是从任意多字符定界符对之间的字符串中提取数据,例如 <= & =>。如果有多个分隔符,那么我只想要最里面的数据对。我已经尝试了 Wiktor 向我展示的示例的变化,但只成功使用了单个字符分隔符,因此再次尝试使用我原来的后向/前瞻解决方案,同样的问题 - 前瞻正确地在第一个匹配时停止,后向仅停止在第一次出现不是第一次匹配。

我已经尝试为额外的大括号添加否定的lookbehinds,并在lookbehind表达式中限制与{1}匹配的数量,但这些都不起作用。我发现了各种关于为正则表达式实现后视的困难以及并非所有正则表达式实现都支持所有功能的评论 - 无论如何,在与 C# (.Net) 正则表达式的第一次匹配之后,是否有后视停止。

以下代码显示了我正在使用的正则表达式以及我的期望和我得到的。

var reg = new Regex(@"(?<=<=).*?(?==>)");
var matched = reg.Matches("I want to get <=data=> between paired <=<=<=delimiters=>=>=>=>");
foreach(var m in matched)
{
   Console.WriteLine(m.ToString());
}

我期望的结果是

data
delimiters

我得到的是

data
<=<=delimiters

标签: c#regex

解决方案


推荐阅读