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

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

该表达式应给出以下结果:

"Assets". => 应该匹配

Assets. => 应该匹配

"Assets. => 不应该匹配

Assets". => 不应该匹配

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

("?)Assets\1

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

什么是正确的表达方式?


MMMHUHU
浏览 206回答 2
2回答

慕无忌1623718

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

森栏

您的正则表达式模式几乎是正确的。你只需要确保你的模式前后没有引号。所以使用模式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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python