是否可以只匹配 python 正则表达式中的通配符?

Is it possible to only match wildcard in python regular expression?

是这样的场景:

前端将正则表达式传递给后端,后端获取并执行正则表达式。但我只想执行通配符匹配。

例如: 前端通过 bash-1.*.0,效果很好

但是bash-1.(hello):*.0,不会匹配bash-1.(hello):1.0

那么 python re 模块是否可以只匹配通配符?

您正在寻找 .* . 是通配符,* 是任意数字(而可比较的 ? 是零或一, + 至少一个 )

regex 中,. 将匹配除行终止符以外的任何内容一次,其中 .* 将匹配无限次。

在您当前的模式中,您试图匹配 . 但是忘记转义它,这意味着它将匹配任何内容。您应该正确转义 .() 然后您将能够找到匹配项。

string = 'bash-1.(hello):1.0'
pattern = 'bash-1\.\(hello\):.\.0'
re.match(pattern, string)
#<re.Match object; span=(0, 18), match='bash-1.(hello):1.0'>

https://regex101.com/r/Wj3V7e/1

如果你想要 glob 式匹配,你应该使用标准库中的 fnmatch 模块。例如:

import fnmatch
print(fnmatch.fnmatch("bash-1.(hello):1.0","bash-1.(hello):*.0")) # True
print(fnmatch.fnmatch("bash-1.(goodbye):1.0","bash-1.(hello):*.0")) # False