是否可以只匹配 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'>
如果你想要 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
是这样的场景:
前端将正则表达式传递给后端,后端获取并执行正则表达式。但我只想执行通配符匹配。
例如:
前端通过 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'>
如果你想要 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