我怎么知道要使用哪个通配符?

How do I know which wildcard to use?

我一直在阅读 glob 的文档,但我对一件事有点迷茫。令我困惑的是 fnmatch,文档显示它允许创建要搜索的字符串模式,类似于 re 但具有不同的通配符表示法。

什么时候字符串中的星号是通配符?什么时候不是?这取决于我导入了哪些包吗?

我是否必须为特定的字符串目的导入特定的包,或者是否有一些通用的通配符?

我正在查看此页面 Google Python for Education,它说 \w 是单词字符的通配符。那么有不止一个通配符吗?或者那个只适用于正则表达式?

好的,我希望我的回答不会过于主观。

fnmatchglob 使用通配符进行文件名匹配。它与正则表达式有一些相似之处,但又有所不同。

wildcards主要用于匹配文件名(例如:*.txtfoo-[0-9].bin),使用起来更简单,也更受限制。

regular expressions比较强大,可以find/match/extract复杂的图案。它们 "overkill" 并且不方便通过扩展名匹配文件名:

示例:

匹配所有扩展名为 .txt 的文件:

  • 通配符:*.txt
  • 正则表达式:.*\.txt$

匹配所有以数字开头的文件名:

  • 通配符:[0-9]*
  • 正则表达式:^\d.*

匹配以 .h 或 .c 扩展名开头的文件:

  • 通配符:a*.[ch]
  • 正则表达式:^a.*\.[ch]$

第一个更容易被高级用户掌握,而后者对脚本编写者和程序员更有用,(并且还允许从文本)。

您可以将 fnmatch 用作程序中文本过滤的穷人正则表达式测试器,这样熟悉文件模式的用户将知道如何使用您的自定义过滤器。

详细了解此 post 中的差异:https://unix.stackexchange.com/questions/57957/how-do-regular-expressions-differ-from-wildcards-used-to-filter-files