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

Regex quotes and not a specific word before quotes

提问人:aSeriousGuest 提问时间:10/23/2018 最后编辑:aSeriousGuest 更新时间:10/23/2018 访问量:103

问:

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

我在 C# 中有一个正则表达式函数来查找引号内的所有单词, 但是,如果引号之前存在特定单词,请忽略整个单词并继续下一行。 同时仍在引号内寻找特定类型的符号,也忽略。

例-

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”并跳到下一行。

C# 正则表达式 报价

评论

0赞 The fourth bird 10/23/2018
有机会.现在,该点与任何字符匹配。试试 (?<!Foo\()\“[^{}\r\n]*\”.(
0赞 aSeriousGuest 10/23/2018
感谢您的回答,我确实尝试过这个,VS2017 告诉我我有一个“无法识别的逃生序列”......
1赞 The fourth bird 10/23/2018
尝试在喜欢之前添加@string pattern = @"(?<!Foo\()\""[^{}\r\n]*\""";
0赞 aSeriousGuest 10/23/2018
现在它可以在没有错误的情况下工作,但仍然找到前面有“Foo(”的引号。
0赞 The fourth bird 10/23/2018
你能举个例子吗?是所有单词都在自己的行上,还是有多个单词?

答:

0赞 The fourth bird 10/23/2018 #1

您可以使用否定前瞻来检查字符串是否在双引号或双引号之间不匹配(?!{}Foo(

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

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

正则表达式演示

解释

  • ^断言字符串的开头
  • (?!消极的展望,断言接下来的事情不会
    • .*\bFoo\(匹配任意字符 0+ 次,后跟单词边界和 Foo(
  • )关闭负面展望
  • (?!消极的展望,断言接下来的事情不会
    • .*匹配任意字符 0+ 次
    • "[^"\r\n]*匹配双引号,匹配 0+ 次不 , ,"\r\n
    • [{}]匹配或{}
    • [^"\r\n]*"匹配 0+ 次 not , ,后跟匹配双引号"\r\n
  • )关闭负面展望
  • .*匹配任意字符 0+ 次
  • $断言字符串的末尾