C# net中的正则表达式,以排除特定单词、多个空格和换行符

C# net中的正则表达式,以排除特定单词、多个空格和换行符,c#,regex,regex-negation,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" @“

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

from xyzTableName     with   (  index =...  

from xyzTableName     (  index =...
如果
with
关键字不存在,则应返回匹配项,如果
with
FROM
关键字之后和
之前存在(
),则不应存在匹配项。必须忽略
FROM
之间的所有其他单词(

我尝试过以下表达方式:

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

@“\bfrom.[\s\t\n]+(?尝试以下模式:
\bfrom\b(?。+\b with\b)[^(+\(\s*索引)

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。单行
元字符将匹配所有字符,包括换行符(
\n

模式分解:

  • \bfrom\b
    :与单词“from”完全匹配,并使用单词边界元字符
  • (?!.+\b with\b)
    :负前瞻检查是否为“with”,如果为“with”,则匹配将失败
  • [^(+
    :负数字符类,用于至少一次匹配非左括号的任何字符
  • \(\s*index
    :匹配左括号(注意必须转义)、任何空格,然后匹配单词“index”

尝试以下模式:
\b从\b(?。++\b带\b)[^(]+\(\s*索引)

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。单行
元字符将匹配所有字符,包括换行符(
\n

模式分解:

  • \bfrom\b
    :与单词“from”完全匹配,并使用单词边界元字符
  • (?!.+\b with\b)
    :负前瞻检查是否为“with”,如果为“with”,则匹配将失败
  • [^(+
    :负数字符类,用于至少一次匹配非左括号的任何字符
  • \(\s*index
    :匹配左括号(注意必须转义)、任何空格,然后匹配单词“index”
我用@“\bfrom.[\s\t\n]+(?我用@”\bfrom.[\s\t\n]+(?它起作用了,在本例中,“来自xyzTableName with(index=…)”预期仅为false。这是仅主ask。。它起作用了,在本例中,“来自xyzTableName with(index=…)”预期仅为false。这是仅主ask。。