簡體   English   中英

如何將以下文件名轉換為Python中的正則表達式?

[英]How can I translate the following filename to a regular expression in Python?

我正在打字時正在與正則表達式作斗爭。

我想確定以下示例文件的模式: b410cv11_test.ext 我希望能夠搜索與上述示例文件的模式匹配的文件。 我從哪里開始(如此迷失和困惑)以及獲得最符合文件模式的解決方案的最佳方法是什么? 提前致謝。

進一步澄清問題:

我希望模式如下:必須以'b'開頭,后跟三位數字,然后是'cv',接着是兩位數字,然后是下划線,接着是'release',接着是.'ext'

既然你有一個人類可讀的文件名描述,那么將其翻譯成正則表達式是非常簡單的(至少在這種情況下;)

必須從

插入符號( ^ )將正則表達式錨定到您想要匹配的開頭,因此您必須以此符號開頭。

'B',

你的re中的任何非特殊字符都會按字面意思匹配,因此你只需使用“b”來表示這一部分: ^b

接着是[...]位數,

這取決於你使用哪種味道:

表達這一點的最常用方法是使用括號( [] )。 這些意思是“匹配其中列出的任何一個字符。 [ASDF]例如匹配ASDF[0-9]將匹配0到9之間的任何內容。

您的庫可能有“任何數字”的快捷方式。 sedawk你可以使用[[:digit:]] [sic!],在python和許多其他語言中你可以使用\\d

所以現在你重讀^b\\d

其次是三個[...]

表達這個的最簡單的方法就是像這樣重復原子三次: \\d\\d\\d

您的語言可能再次提供快捷方式:大括號( {} )。 有時您必須使用反斜杠來逃避它們(如果您使用sed或awk,請閱讀“擴展正則表達式”)。 它們還為您提供了一種方法來說“至少x,但不超過前一個原子的{x,y} ”: {x,y}

現在你有: ^b\\d{3}

然后是'cv',

文字匹配再次,現在我們有^b\\d{3}cv

后跟兩位數,

我們已經介紹了這個: ^b\\d{3}cv\\d{2}

然后是下划線,然后是'release',然后是.'ext'

同樣,這應該完全匹配,但點( . )是一個特殊字符。 這意味着您必須使用反斜杠轉義它: ^\\d{3}cv\\d{2}_release\\.ext

省略反斜杠意味着像“b410cv11_test_ext”這樣的文件名也會匹配,這對你來說可能是也可能不是問題。

最后,如果您想保證“.ext”之后沒有其他內容,請將re錨定到匹配的東西的末尾,使用美元符號( $ )。

因此,針對您的特定問題的完整正則表達式將是:

^b\d{3}cv\d{2}_release\.ext$

簡單。

無論您使用何種語言或庫,都必須在文檔中的某處提供參考,以便向您展示您的案例中的確切語法。 一旦您學會將問題分解為合適的描述,就會逐步了解更高級的結構。

為避免混淆,請按順序閱讀以下內容。

首先,你有glob模塊,它處理文件名正則表達式,就像Windows和unix shell一樣。

其次,你有fnmatch模塊, 它只使用unix shell規則進行模式匹配。

第三,你有re模塊,它是一套完整的正則表達式。

然后問另一個更具體的問題。

我希望模式如下:必須以'b'開頭,后跟三位數字,然后是'cv',接着是兩位數字,然后是下划線,接着是'release',接着是.'ext'

^b\d{3}cv\d{2}_release\.ext$

你的問題有點不清楚。 你說你想要一個正則表達式,但是你可能想要一個可以用ls這樣的命令使用的glob風格模式嗎? glob表達式和正則表達式在概念上類似,但在實踐中有所不同(正則表達式功能更強大,在查找文件時,最常見的情況下,glob樣式模式更容易。

另外,你認為這個模式是什么? 當然,*(glob)或。*(正則表達式)將匹配模式。 另外, _test.ext(glob)或。 _test.ext(regexp)模式將與許多其他變體匹配。

你能更具體地說明這種模式嗎? 例如,您可以將其描述為“b,后跟數字,后跟cv,后跟數字......”

一旦你能用你的母語精確地解釋模式(這必定是你的第一步),將它轉換為全局或正則表達式模式通常是一項相當直接的任務。

如果字母不重要,你可以試試\\ w \\ d \\ d \\ d \\ w \\ w \\ d \\ d_test.ext哪個匹配字母/數字模式,或者b \\ d \\ d \\ dcv \\ d \\ d_test.ext或者兩者的混合。

在使用正則表達式時,我發現Mochikit正則表達式的例子是一個很好的幫助。

/^b\d\d\dcv\d\d_test\.ext$/

然后使用python re(regex)模塊進行匹配。 這當然是假設正則表達式確實是你需要的而不是像其他人提到的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM