Regex 正则表达式前面没有一个单词

Regex 正则表达式前面没有一个单词,regex,string,Regex,String,我需要找到一组c#文件中的所有字符串,除非它们在一个Contract.Require语句中。字符串中可能有任意数量的文本,所以在“和”之间,以及字符串和合同之间可能有任意数量的文本。Require 我有这个: /".+"/ 查找字符串,但我需要改进搜索 这可能吗?如果您真的想使用正则表达式,可以使用负查找来确保字符串前面没有约定。Require。然而,在这个解决方案中有很多警告(例如Commo等),所以它可能不是您的最佳选择。无论如何,这里有一个简单的演示(您需要调整它)如何在Python中使

我需要找到一组c#文件中的所有字符串,除非它们在一个Contract.Require语句中。字符串中可能有任意数量的文本,所以在“和”之间,以及字符串和合同之间可能有任意数量的文本。Require

我有这个:

/".+"/
查找字符串,但我需要改进搜索


这可能吗?

如果您真的想使用正则表达式,可以使用负查找来确保字符串前面没有
约定。Require
。然而,在这个解决方案中有很多警告(例如Commo等),所以它可能不是您的最佳选择。无论如何,这里有一个简单的演示(您需要调整它)如何在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) + "."
上面表达式中的lookbehind是
(?),匹配字符串文本的正则表达式是
”([^“\\\]\\\)*“
。为了能够匹配字符串,例如“quote\”quote,需要使用稍微复杂一点的正则表达式


希望能有所帮助。

如果同一行有两个字符串,会发生什么?如果字符串中有一个转义的?不是正则语法,无法可靠工作。如果有注释掉的字符串,会发生什么?大多数正则表达式实现不再是“正则的”:p。
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 "".