Python正则表达式,以匹配可选的双引号字符串

Python正则表达式,以匹配可选的双引号字符串,python,regex,Python,Regex,我想使用Python正则表达式模块re将可选的双引号字符串与正则表达式匹配 表达式应给出以下结果: “资产”。=>应匹配 资产。=>应匹配 “资产。=>不应匹配 资产“=>不应匹配 我尝试使用正则表达式中的反向引用来实现这一点: ("?)Assets\1 但是,即使没有匹配的结束引号,它也会匹配。 “Assets.->忽略初始引号”,并匹配单词的其余部分 什么是正确的表达式?您可以使用以下模式。请注意,它基本上列出了两种不同的情况,因为众所周知,括号不是正则的,而是上下文敏感的,因此很难用正

我想使用Python正则表达式模块re将可选的双引号字符串与正则表达式匹配

表达式应给出以下结果:

“资产”。
=>应匹配

资产。
=>应匹配

“资产。
=>不应匹配

资产“
=>不应匹配

我尝试使用正则表达式中的反向引用来实现这一点:

("?)Assets\1 
但是,即使没有匹配的结束引号,它也会匹配。
“Assets.
->忽略初始引号”,并匹配单词的其余部分


什么是正确的表达式?

您可以使用以下模式。请注意,它基本上列出了两种不同的情况,因为众所周知,括号不是正则的,而是上下文敏感的,因此很难用正则表达式处理:

>>> p = re.compile(r'^(?:"[^"]+"|[^"]+)$')
>>> bool(p.match('"assets"'))
True
>>> bool(p.match('"assets'))
False
>>> bool(p.match('assets'))
True

这还假设匹配的字符串前后没有字符。

您的regexp模式几乎是正确的。您只需确保在模式前后都没有引号。因此,使用模式<代码> r '(如果字符串包含逃逸(如<代码>)Foo\“bar”< /代码>?)无论您试图用正则表达式分析什么,都不应该用正则表达式进行解析。此外,如果中间有引号,如<代码> FO,则不清楚应该发生什么。“Bar等。如果您试图解析字符串文字,则可以使用正则表达式进行解析(尽管可能不建议这样做)。如何识别未加引号的值的开头和结尾?”?
>>> words = ['"Assets"', 'Assets', '"Assets', 'Assets"']
>>> ptrn = re.compile(r'(?<!")("?)Assets\1(?!")')
>>> [bool(ptrn.match(word)) for word in words]
[True, True, False, False]