2024-10-03 13:25:12 发布
网友
我想使用Python regex modulere
表达式应给出以下结果:
"Assets".=>;应该匹配
"Assets".
Assets.=>;应该匹配
Assets.
"Assets.=>;不应匹配
"Assets.
Assets".=>;不应匹配
Assets".
我尝试使用正则表达式中的反向引用来实现这一点:
("?)Assets\1
但是,即使没有匹配的结束引号,它也匹配。 "Assets.->;忽略“初始引号”,并匹配单词的其余部分。你知道吗
什么是正确的表达方式?你知道吗
您可以使用以下模式。请注意,它基本上列出了两种不同的情况,因为众所周知,括号不是正则的,而是上下文相关的,因此很难用正则表达式处理:
>>> p = re.compile(r'^(?:"[^"]+"|[^"]+)$') >>> bool(p.match('"assets"')) True >>> bool(p.match('"assets')) False >>> bool(p.match('assets')) True
这还假设在匹配的字符串之前或之后没有字符。你知道吗
您的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]
您可以使用以下模式。请注意,它基本上列出了两种不同的情况,因为众所周知,括号不是正则的,而是上下文相关的,因此很难用正则表达式处理:
这还假设在匹配的字符串之前或之后没有字符。你知道吗
您的regexp模式几乎是正确的。你只需要确保在你的模式前后没有引号。所以使用模式
r'(?<!")("?)Assets\1(?!")
相关问题 更多 >
编程相关推荐