.net中的正则表达式,用于排除特定的单词和多个空格和换行符
本文关键字:单词 空格 换行符 正则表达式 用于 排除 net | 更新日期: 2023-09-27 18:15:25
我需要一个正则表达式来查找像
这样的子字符串from xyzTableName with ( index =...
和
from xyzTableName ( index =...
如果with
关键字不存在,那么它应该返回一个匹配,如果with
在FROM
关键字之后和(
之前存在,那么应该没有匹配。from
和(
之间的所有其他单词必须被忽略。
我试过下面的表达式:
@"'bfrom.*['s't'n]+(?<!with)['s't'n](['s't'n]+index"
和相同的一些变体。当只有正常/单一空白时,我能够解决这个问题。但是当我尝试使用多个空格和换行符时,它失败了。
试试这个模式:'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"