我想使用python regex模块将可选的双引号字符串与正则表达式匹配 重新
表达式应给出以下结果:
"Assets". =>应匹配
"Assets".
Assets. =>应匹配
Assets.
"Assets. =>不应匹配
"Assets.
Assets". =>不应匹配
Assets".
我尝试在正则表达式中使用back-reference来实现这一点:
("?)Assets\1
但是,即使没有匹配的结束引号,它也会匹配。 “资产。 ->忽略首引号“,并匹配单词的其余部分。
“资产。
这句话的正确表达方式是什么?
您的regexp模式几乎是正确的。您只需确保在您的模式前后没有引号。所以使用这个模式 r'(?<!")("?)Assets\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]
您可以使用以下模式。请注意,它基本上列出了这两种不同的情况,因为众所周知,括号不是规则的,而是上下文相关的,因此很难用正则表达式处理:
>>> p = re.compile(r'^(?:"[^"]+"|[^"]+)$') >>> bool(p.match('"assets"')) True >>> bool(p.match('"assets')) False >>> bool(p.match('assets')) True
这还假定在匹配的字符串之前或之后没有字符。