我的目标是确定这种模式:
STR("<some_string>")
我已经构建了这个正则表达式:
(STR\()"(.+?)("\))
这在大多数情况下都能正常工作,但是在这个例子中失败了:
STR("test \") string")
在上述情况下,我希望获得test \") string
答案 0 :(得分:1)
我建议你添加一个负面的lookbehind断言。
(STR\()"(.+?)(?<!\\)("\))
示例:
>>> s1 = r'STR("<some_string>")'
>>> s2 = r'STR("test \") string")'
>>> re.findall(r'STR\("(.+?)(?<!\\)"\)', s1)
['<some_string>']
>>> re.findall(r'STR\("(.+?)(?<!\\)"\)', s2)
['test \\") string']
(?<!\\)"
否定的基于断言的断言模式会断言双引号不会以反斜杠字符开头。
或强>
STR\("((?:\\"|[^"])*)"\)