Python Regex匹配可选的双引号字符串

时间:2018-09-10 19:35:39

标签: python regex

我想使用Python正则表达式模块 re

将可选的双引号字符串与正则表达式匹配

表达式应给出以下结果:

"Assets". =>应该匹配

Assets. =>应该匹配

"Assets. =>不匹配

Assets". =>不匹配

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

("?)Assets\1 

但是,即使没有匹配的结尾引号,它也会匹配。 "Assets.->忽略初始引号“,并匹配其余单词。

什么是正确的表达方式?

2 个答案:

答案 0 :(得分:1)

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

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

这还假定在匹配的字符串之前或之后没有字符。

答案 1 :(得分:1)

您的正则表达式模式几乎正确。您只需要确保模式前后没有引号即可。因此,请使用模式r'(?<!")("?)Assets\1(?!")

>>> words = ['"Assets"', 'Assets', '"Assets', 'Assets"']
>>> ptrn = re.compile(r'(?<!")("?)Assets\1(?!")')
>>> [bool(ptrn.match(word)) for word in words]
[True, True, False, False]