我必須在另一個字符串(乾草堆)內找到特定「大括號」之間不發生的特定字符串(針)的出現。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