【问题标题】:Python equivalent to the Tcl's "string match"Python 相当于 Tcl 的“字符串匹配”
【发布时间】:2019-02-21 14:14:16
【问题描述】:

我正在寻找与 Tcl 的 string match 操作等效的 Python。具体来说,我想正确处理特殊序列(*、? 和 [chars])。

例如,给定三个 Python 字符串:

expected = 'Foo? Bar* Tar'
actual1 = 'Foo2 Barfluff Tar'
actual2 = 'Foo Bar Tar'

匹配操作match(expected,actual1)应该返回true,但match(expected,actual2)应该返回false。

非常感谢!

【问题讨论】:

  • 您正在寻找正则表达式(模块re)。
  • @DYZ:实际上,对于类似 glob 的模式匹配,fnmatch 更合适。它实际上是在后台使用re 实现的(通过缓存,重复使用相同的 glob 模式不需要一遍又一遍地重新转换/重新编译等效的正则表达式),但它直接与 shell 通配符模式一起使用,无需重写它们成正则表达式。

标签: python string tcl matching glob


【解决方案1】:

你想要the fnmatch modulere 提供完整的正则表达式,fnmatch 执行有限的、shell 样式的通配符匹配。

对于区分大小写的匹配,它很简单:

>>> fnmatch.fnmatchcase(actual1, expected)
True
>>> fnmatch.fnmatchcase(actual2, expected)
False

如果您想遵循操作系统的区分大小写规则(即在 Windows 上不区分大小写,在大多数其他操作系统上区分大小写),您可以使用纯 fnmatch.fnmatch 来调用自动大小写规范化。

【讨论】:

  • 感谢您指出 fnmatch.fnmatchcase。这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多