用于特定区域外匹配的 C# 正则表达式

标签 c# regex

我必须找到某个字符串(针)在另一个字符串(haystack)中的出现,而这些字符串没有出现在特定的“大括号”之间。

例如考虑这个干草堆: “开始一些事情结束一些其他事情开始一些其他事情结束更多的事情。” 还有这个针: “一些” 用大括号“BEGIN”和“END”

我想找到所有不在大括号之间的针。 (有两个匹配项:“some”后跟“other”和“some”后跟“more”)

我认为我可以使用负前瞻/后视的正则表达式来解决这个问题,但如何解决?

我试过了

(?<!(BEGIN))some(?!(END))

这给了我 4 个匹配项(显然是因为“BEGIN”和“END”之间没有直接包含“some”)

我也试过

(?<!(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);

最佳答案

这样的事情对你有用吗:

(?:^|END)((?!BEGIN).*?)(some)(.*?)(?:BEGIN|$)

这似乎与您的文本匹配,正如我使用 RegExDesigner.NET 测试的那样。

关于用于特定区域外匹配的 C# 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5597564/

相关文章:

regex - 使用正则表达式在 Notepad++ 中用引号包围字符串

Java 正则表达式不工作?

c# - Tesseract OCR 引擎无法从自动生成的图像中读取文本,但可以从 MS Paint 中的 CUT 读取文本

c# - 使用 Xamarin 的 Mono for Android 将可移植类传递给 Activity

c# - 淡入/淡出声音

c# - 如何通过接口(interface)继承在C#中重新定义一个属性?

javascript - 特定模式的 RegEx,不包括 URL

c# - 获取玩家姓名和分数

regex - 使用正则表达式的语法高亮编程语言是否可能?

javascript - javascript中的正则表达式问题