【发布时间】:2011-04-08 15:46:38
【问题描述】:
我必须在另一个字符串 (haystack) 中找到某个字符串 (needle) 的出现,而这些字符串不会出现在特定的“大括号”之间。
例如考虑这个干草堆: “开始一些事情 结束一些其他事情 开始一些其他事情 END 还有一些事情。” 还有这个针: “一些” 用大括号“BEGIN”和“END”
我想找出所有不在牙套之间的针。 (有两个匹配:“some”后跟“other”和“some”后跟“more”)
我想我可以使用带有负前瞻/后视的正则表达式来解决这个问题,但是如何解决呢?
我试过了
(?<!(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);
【问题讨论】:
-
除了使用正则表达式之外,您是如何尝试其他解决方案的?