我必须在另一个字符串(干草堆)内找到特定“大括号”之间不发生的特定字符串(针)的出现。C#正则表达式匹配特定区域外的匹配
例如,考虑这个干草堆: “开始的东西结束一些其他的事情开始的东西结束还有更多的东西。” 而这种针: “一些” 随着我想找到不花括号之间的所有针在大括号“BEGIN”和“END”
。 (有两个匹配:“一些”后面跟着“其他”和“一些”后面跟着“更多”)
我想我可以使用带有负向望远镜/ lookbehind的正则表达式解决这个问题,但是怎么做?
我已经试过
(?<!(BEGIN))some(?!(END))
这给了我4场比赛(显然是因为没有 “一定” 是直接封闭之间的 “开始” 和 “结束”)
我也试过
(?<!(BEGIN.*))some(?!(.*END))
但是这样根本没有匹配(显然是因为每个针头都以某种方式先于“BEGIN”)
不,我被卡住了。
这是我使用了最新的C#代码:
string input = "BEGIN something END some other thing BEGIN something else END yet some more things.";
global::System.Text.RegularExpressions.Regex re = new Regex(@"(?<!(BEGIN.*))some(?!(.*END))");
global::System.Text.RegularExpressions.MatchCollection matches = re.Matches(input);
global::NUnit.Framework.Assert.AreEqual(2, matches.Count);
除了使用正则表达式之外,您是如何尝试其他解决方案的? – jfs 2011-04-08 15:49:37