2016-11-22 50 views
0

我一直在做一些關於glob的文檔的閱讀,但是我在一件事上已經有點失落了。令我困惑的是fnmatch,文檔顯示它允許使用字符串模式進行搜索,類似於re,但使用不同的通配符表示法。我如何知道要使用哪個通配符?

當字符串中的星號是通配符嗎?不是嗎?它取決於我導入了哪些軟件包?

我是否必須爲某些特定目的導入特定的包,或者是否有一些通用通配符?

我在看這個頁面Google Python for Education它說\w是一個單詞字符的通配符。那麼有多個通配符?或者那個只存在於正則表達式中?

+0

通配符不是正則表達式。 –

+1

我不明白你的問題。 'fnmatch'和're'都使用'*'並被使用。你能否澄清你的問題?請參閱:https://docs.python.org/2/library/re.html https://docs.python.org/2/library/fnmatch.html – Fallenreaper

+0

*通配符與'。*'相同。當你說通配符時,它不是正則表達式。 –

回答

1

好吧,我希望我的回答不會太過分。

通配符表示由fnmatchglob用於文件名匹配。它與正則表達式有一些相似之處,但它是不同的。

wildcards主要用於匹配文件名(例如:*.txtfoo-[0-9].bin),更易於使用並且也較爲有限。

regular expressions功能更強大,可以找到/匹配/提取複雜圖案。他們是 「矯枉過正」,而不是通過方便的擴展,以匹配文件名:

例子:

的所有文件匹配.txt擴展:

  • 通配符:*.txt
  • 正則表達式:.*\.txt$

匹配以數字開頭的所有文件名:

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

匹配文件開始與軸承的.h或.c擴展:

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

第一個更容易被高級用戶掌握,而後者對腳本編寫者&更加有用,(也允許從文本中提取部分,)。

您可以使用fnmatch作爲您的程序中文本過濾的窮人正則表達式測試程序,因此熟悉文件模式的用戶將知道如何使用您的自定義過濾器。

瞭解更多關於在這個崗位的差異:https://unix.stackexchange.com/questions/57957/how-do-regular-expressions-differ-from-wildcards-used-to-filter-files

+0

正則表達式的第二個表示法也在我正在查看的'glob'文檔中,在這裏:[link](https://docs.python.org/2/library/glob.html) 爲什麼你想要那裏像'。* \。'?這不僅僅意味着你的文件夾名稱中有擴展名嗎? – thleo

+1

我不明白你的問題。使用正則表達式匹配文件不能用'glob'完成。你必須遍歷目錄/文件,並在每個文件上使用正則表達式匹配。沒有標準模塊做到這一點。 –

相關問題