错误匹配的正则表达式

Wrong matching regex

所以我正在使用 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)

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

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

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