我想做的就是这么简单,但同时却不是。
我在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”,然后跳到下一行。
答案 0 :(得分:0)
您可以使用负数lookahead (?!
来检查字符串是否与双引号之间的{}
或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+次而不是"
,\r
,\n
,然后匹配双引号)
近距离否定预测.*
匹配任意字符0次以上$
声明字符串的结尾