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

2024-10-03 13:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用Python regex modulere

表达式应给出以下结果:

"Assets".=>;应该匹配

Assets.=>;应该匹配

"Assets.=>;不应匹配

Assets".=>;不应匹配

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

("?)Assets\1 

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

什么是正确的表达方式?你知道吗


Tags: gt表达式单词引号regexassetsmodulere
2条回答

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

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

这还假设在匹配的字符串之前或之后没有字符。你知道吗

您的regexp模式几乎是正确的。你只需要确保在你的模式前后没有引号。所以使用模式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]

相关问题 更多 >