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

本文关键字:单词 空格 换行符 正则表达式 用于 排除 net | 更新日期: 2023-09-27 18:15:25

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

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

from xyzTableName     (  index =...

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

我试过下面的表达式:

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

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

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

试试这个模式:'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"