我需要查找一组c#文件中的所有字符串,除非它们在Contract.Require语句中。字符串中可能有任意数量的文本,因此在“和”之间,以及字符串和Contract.Require之间的任何数量的文本。
我有这个:
/".+"/
找到字符串,但我需要优化搜索。
这甚至可能吗?
答案 0 :(得分:1)
如果您真的想使用正则表达式,可以使用负向lookbehind来确保您的字符串前面没有Contract.Require
。但是,这个解决方案中有许多警告(例如commen等等),所以它可能不是你最好的选择。无论如何,这是一个简单的演示(你需要适应它)在Python中使用类似的东西:
import re
reg = re.compile('(?<!Contract\.Require\()"([^"\\\]|\\\.)*"')
tests = [ 'Contract.Require("test string")',
'OtherRequire("test string" + someVar)',
'String var = "testString";',
'String another = "test\\"quotestring"',
'String empty = ""' ]
for test in tests:
m = reg.search(test)
print test, "wasn't matched." if m == None else "matched " + m.group(0) + "."
<强>输出强>:
Contract.Require("test string") wasn't matched.
OtherRequire("test string" + someVar) matched "test string".
String var = "testString" matched "testString".
String another = "test\"quotestring" matched "test\"quotestring".
String empty = "" matched "".
上面表达式中的lookbehind是 (?<!Contract\.Require\()
,匹配字符串文字的正则表达式是 "([^"\\\]|\\\.)*"
。为了能够匹配诸如“quote \”quote“之类的字符串,需要这个稍微复杂的字符串文字正则表达式。
希望它有所帮助。