首页 > 解决方案 > 错误的匹配正则表达式

问题描述

所以我使用 re 模块来编译我的正则表达式,我的正则表达式看起来像这样:

"(^~ \w+?[ & ~ \w+?]*?$)"

所以我使用 pattern = re.compile(regex) 编译它,然后我使用 re.findall(pattern, string) 来查找给定的字符串是否匹配,如果匹配则给我组。

我匹配的字符串是“v1 V ~v2_ V ~~v3”。

我希望没有匹配,但它说它匹配正则表达式。我怀疑 \w+ 匹配空格,以便它匹配整个字符串,但我在文档中找不到正确的。我错过了什么?

这是最小的可复制示例:

import re

test_string = "v1 V ~v2_ V ~~v3"
regex = "(^~*\w+?[ & ~*\w+?]*?$)"

pattern = re.compile(regex)
for elem in re.findall(regex, test_string):
    print(elem)

标签: python-3.xboolean-logicre

解决方案


如果您希望不匹配,我认为您的问题在于[ & ~*\w+?]*部分。方括号之间的字符表示出现一次,在这种情况下,出现一次 &、~、*、?wordspace。最后的星号 ( *) 使括号中的内容出现零次或多次。

如果您想要匹配此子正则表达式& ~*\w+?零次或多次,请使用括号。

所以我会说你想要这个正则表达式:((^~*\w+?( & ~*\w+?)*?$)只需更改括号的括号。


推荐阅读