.net中的正则表达式,用于排除特定单词和多个空格和换行符

时间:2011-11-20 17:27:15

标签: c# regex regex-negation

我需要一个正则表达式来查找像

这样的子字符串
from xyzTableName     with   (  index =...  

from xyzTableName     (  index =...

如果不存在with关键字,那么它应该返回匹配项,如果with关键字之后FROM关键字存在(,那么应该没有匹配项。必须忽略from(之间的所有其他字词。

我尝试过以下表达式:

    @"\bfrom.*[\s\t\n]+(?<!with)[\s\t\n]([\s\t\n]+index"

和一些相同的变种。当只有正常/单个空格时,我能够解决这个问题。但是当我尝试使用多个空格和换行符时,它失败了。

1 个答案:

答案 0 :(得分:1)

尝试此模式:\bfrom\b(?!.+\bwith\b)[^(]+\(\s*index

string input = @"from xyzTableName     
with   (  index =...";
string pattern = @"\bfrom\b(?!.+\bwith\b)[^(]+\(\s*index";
bool result = Regex.IsMatch(input, pattern,
                RegexOptions.Singleline | RegexOptions.IgnoreCase);

以上返回false。更改输入以删除单词“with”,它将返回true。使用RegexOptions.Singleline .元字符将匹配所有字符,包括换行符(\n)。

模式分解:

  • \bfrom\b:与“from”一词完全匹配,并使用字边界元字符
  • (?!.+\bwith\b):负面预测以检查“with”,如果匹配将失败
  • [^(]+:负字符类,用于匹配任何不是左括号的字符,至少一次。
  • \(\s*index:匹配一个左括号(注意它必须被转义),任何空格,然后单词“index”