一个正则表达式匹配,其中一个单词出现在一行而没有另一个单词

时间:2015-02-16 16:24:34

标签: c# regex

我已经通过了很多例子和帖子,但没有一个是有效的。 我想找到一个出现一个单词而另一个单词出现的行。 使用C#Regex.IsMatch中工作 - 我提取了一个文件并在该文件上运行正则表达式。

Match if "WriteLine" found without "ALLOWEDTAG".

这不匹配:

Console.WriteLine("FOUND line without"); // ALLOWEDTAG

这将匹配

Console.WriteLine("FOUND line without"); // anything.

我尝试了以下内容:

TagRegex = @"WriteLine.^((?!ALLOWED TAG).)*$";
TagRegex = @"\<WriteLine(:Wh+~(ALLOWED_TAG):w=:q)+:Wh*";
TagRegex = @"^(?!.[\s\S]*ALLOWEDTAG).[\s\S]*WriteLine.*$";
TagRegex = @"^(?!.*ALLOWEDTAG).*WriteLine.*$";
TagRegex = @"((?!ALLOWEDTAG).)*WriteLine.*";
TagRegex = @"((.*WriteLine.*)(?!.*ALLOWEDTAG.*))";

什么了?

2 个答案:

答案 0 :(得分:4)

您需要使用基于正面的负面前瞻。当您尝试匹配多行时添加多行修饰符(?m)

@"(?m)^(?!.*?\bALLOWEDTAG\b).*?\bWriteLine\b.*"

DEMO

答案 1 :(得分:2)

您对此的第四次尝试很简单,您只需要启用multi-line修饰符,这会导致^$锚点与每行的开头/结尾相匹配。

@"(?m)^(?!.*ALLOWEDTAG).*WriteLine.*$"

Ideone Demo