正则表达式引号,而不是引号之前的特定单词

时间:2018-10-22 19:09:15

标签: c# regex quotes

我想做的就是这么简单,但同时却不是。

我在C#中具有RegEx函数,可以查找引号内的所有单词, 但是,如果在引号之前存在一个特定的单词,请忽略整个单词并继续到下一行。 同时仍在引号内查找特定类型的符号,并且也忽略。

示例-

My RegEx = @"(?<!Foo\()\""[^{}\r\n]*\""";

Text -
dontfindme1 = "Hello{}"
dontfindme2 = Foo("ABC")
findme1 = "Just a simple text to find"
findme2 = SuperFoo("WORKS")

输出示例-

"ABC"
"Just a simple text to find"
"WORKS"

现在我的问题是我不想在引号前找到名称“ Foo(” 而且我不想找到“ {”或“}”或“(”或“)”或换行 我只需要找不到“ ABC”,然后跳到下一行。

1 个答案:

答案 0 :(得分:0)

您可以使用负数lookahead (?!来检查字符串是否与双引号之间的{}Foo(都不匹配

^(?!.*\bFoo\()(?!.*"[^"\r\n]*[{}][^"\r\n]*").*$

在C#string pattern = @"^(?!.*\bFoo\()(?!.*""[^""\r\n]*[{}][^""\r\n]*"").*$";

Regex demo

说明

  • ^断言字符串的开头
  • (?!否定前瞻,断言接下来的事情不会
    • .*\bFoo\(匹配任意字符0次以上,然后匹配单词边界和Foo(
  • )近距离否定预测
  • (?!否定前瞻,断言接下来的事情不会
    • .*匹配任意字符0次以上
    • "[^"\r\n]*匹配双引号,而不匹配0+次"\r\n
    • [{}]匹配{}
    • [^"\r\n]*"匹配0+次而不是"\r\n,然后匹配双引号
  • )近距离否定预测
  • .*匹配任意字符0次以上
  • $声明字符串的结尾