为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMMHUHU 2021-06-08 14:09:42
我想使用 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

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


查看完整回答
反对 回复 2021-06-15
?
森栏

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]


查看完整回答
反对 回复 2021-06-15
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号