Python 中的通配符匹配

Use*_*ser 3 python string wildcard match matching

我有一个名为 Pattern 的类,其中有两个方法,即 equals 和 setwildcard。Equates 返回子字符串在字符串中首次出现的索引,setwildcard 设置子字符串中的通配符

所以

p = Pattern('xyz')
t = 'xxxxxyz'
p.equates(t)
Run Code Online (Sandbox Code Playgroud)

返回 4

p = Pattern('x*z', '*')
t = 'xxxxxgzx'
p.equates(t)
Run Code Online (Sandbox Code Playgroud)

返回 4,因为 * 是通配符,可以匹配 t 内的任何字母,只要 x 和 z 匹配。实现这一点的最佳方法是什么?

小智 10

正如已接受的答案所示,正则表达式是处理该问题的一种方法。不过,如果您需要更简单的模式(例如 Unix shell 风格的通配符),那么fnmatch内置库可以提供帮助:

表达方式:

  • *- 匹配一切
  • ?- 匹配任何单个字符
  • [seq]- 匹配任意字符seq
  • [!seq]- 匹配不在其中的任何字符seq

例如,尝试找到与以下内容匹配的任何内容localhost

import fnmatch

my_pattern = "http://localhost*"
name_to_check = "http://localhost:8080"

fnmatch.fnmatch(name_to_check, my_pattern) # True
Run Code Online (Sandbox Code Playgroud)

这样做的好处是它/不被视为特殊字符,因此对于文件名/U​​RL 匹配来说,这种方法效果很好,无需预先转义所有斜杠!