如何在 Python 后向断言正则表达式 (?<=\\) 中使用 '\' 来匹配类似 C++ 的带引号的字符串

lua*_*art 5 python regex backslash lookbehind

如何使用lookbehind断言在Python中匹配r'\a' ?
实际上,我需要匹配 C++ 字符串,例如"a \" b"and

"str begin \
end"
Run Code Online (Sandbox Code Playgroud)

我试过:

>>> res = re.compile('(?<=\)a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/re.py", line 190, in compile
    return _compile(pattern, flags)
  File "/usr/lib/python2.7/re.py", line 244, in _compile
    raise error, v # invalid expression

>>> res = re.compile('(?<=\\)a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/re.py", line 190, in compile
    return _compile(pattern, flags)
  File "/usr/lib/python2.7/re.py", line 244, in _compile
    raise error, v # invalid expression
sre_constants.error: unbalanced parenthesis

>>> res = re.compile('(?<=\\\)a')
>>> ms = res.match(r'\a')
>>> ms is None
True
Run Code Online (Sandbox Code Playgroud)

真实示例:
当我"my s\"tr"; 5;像这样进行打包时ms = res.match(r'"my s\"tr"; 5;'),预期输出是:"my s\"tr"

回答
最后stribizhev提供了解决方案。我认为我的初始正则表达式的计算成本较低,唯一的问题是它应该使用原始字符串声明:

>>> res = re.compile(r'"([^\n"]|(?<=\\)["\n])*"', re.UNICODE)
>>> ms = res.match(r'"my s\"tr"; 5;')
>>> print ms.group()
"my s\"tr"
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 1

编辑:最终的正则表达式是对单词对齐提供的正则表达式的改编

我认为您正在寻找这个正则表达式:

(?s)"(?:[^"\\]|\\.)*"
Run Code Online (Sandbox Code Playgroud)

请参阅regex101 上的演示。

Python 代码示例(在TutorialsPoint 上测试):

import re
p = re.compile(ur'(?s)"(?:[^"\\]|\\.)*"')
ms = p.match('"my s\\"tr"; 5;')
print ms.group(0)
Run Code Online (Sandbox Code Playgroud)