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

慕无忌1623718
TA贡献1744条经验 获得超4个赞
您可以使用以下模式。请注意,它基本上列出了两种不同的情况,因为众所周知,括号不是正则的,而是上下文敏感的,因此很难用正则表达式处理:
>>> p = re.compile(r'^(?:"[^"]+"|[^"]+)$')
>>> bool(p.match('"assets"'))
True
>>> bool(p.match('"assets'))
False
>>> bool(p.match('assets'))
True
这也假设在匹配的字符串之前或之后没有字符。

森栏
TA贡献1810条经验 获得超5个赞
您的正则表达式模式几乎是正确的。你只需要确保你的模式前后没有引号。所以使用模式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]
添加回答
举报
0/150
提交
取消