【问题标题】:How do I know which wildcard to use? [closed]我如何知道要使用哪个通配符? [关闭]
【发布时间】:2016-11-22 19:54:48
【问题描述】:

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

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

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

我正在查看此页面Google Python for Education,它说\w 是单词字符的通配符。所以有不止一个通配符?还是只存在于正则表达式中?

【问题讨论】:

  • 通配符不是正则表达式。
  • 我不明白你的问题。 fnmatchre 都使用 * 并被使用。你能进一步澄清你的问题吗?见:docs.python.org/2/library/re.htmldocs.python.org/2/library/fnmatch.html
  • * 通配符与.* 相同。当你说通配符时,它不是正则表达式。
  • "什么时候字符串中的星号是通配符?什么时候不是?这取决于我导入了哪些包?" — 您是在问fnmatch 何时将字符串中的星号视为通配符,还是您认为通配符是独立于fnmatchre 的语言的一部分?

标签: python python-3.x wildcard


【解决方案1】:

好的,我希望我的回答不会太基于意见。

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

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

regular expressions 更强大,可以查找/匹配/提取复杂的模式。它们“矫枉过正”,不方便按扩展名匹配文件名:

例子:

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

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

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

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

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

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

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

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

在这篇文章中阅读更多关于差异的信息:https://unix.stackexchange.com/questions/57957/how-do-regular-expressions-differ-from-wildcards-used-to-filter-files

【讨论】:

  • 您对正则表达式的第二个表示法也在我正在查看的glob 文档中,这里是:link 你为什么想要像.*\. 这样的东西?这不是意味着您的文件夹名称中有扩展名吗?
  • 我不明白你的问题。 glob 无法使用正则表达式匹配文件。您必须遍历目录/文件并在每个文件上使用正则表达式匹配。没有标准模块可以做到这一点。
猜你喜欢
  • 2023-02-04
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多