我想使用Python正则表达式模块 re
将可选的双引号字符串与正则表达式匹配表达式应给出以下结果:
"Assets".
=>应该匹配
Assets.
=>应该匹配
"Assets.
=>不匹配
Assets".
=>不匹配
我试图在正则表达式中使用反向引用来实现这一点:
("?)Assets\1
但是,即使没有匹配的结尾引号,它也会匹配。
"Assets.
->忽略初始引号“,并匹配其余单词。
什么是正确的表达方式?
答案 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]