2008-11-21 44 views
2

我現在正在輸入正規表達式。如何將以下文件名轉換爲Python中的正則表達式?

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

問題的進一步說明:

我想是如下的圖案:必須用「B」開始,接着是三個數字,後跟「CV」,後面是兩個數字,然後是下劃線,然後是'釋放',然後是.'ext'

+0

什麼是實際的文件模式?從_one_例子我們不能推斷你想要的。 – hop 2008-11-21 21:37:12

回答

11

現在,你有你的文件名的人類可讀的描述,這是相當直截了當地把它翻譯成正則表達式(至少在這種情況下, )

必須

尖號(^)錨正則表達式的要匹配什麼從頭開始,所以你再有開始有此符號。

'B',

在你重新任何非特殊字符將逐字匹配,所以你只需要使用 「B」 的這部分:^b

,然後按[...]數字,

這取決於其重新味道你使用了一下:

表達這種最普遍的方法是使用括號([] )。這些意味着「匹配中所列的任何一個字符。[ASDF]例如將匹配是0到9之間ASDF[0-9]將匹配任何

你重新圖書館可能有一個快捷鍵」任何數字」在sedawk你可以使用[[:digit:]] [原文如此!],Python和許多其他語言,你可以使用\d

所以,現在你再讀取^b\d

跟着三個[...]

最簡單的方式來表達這將是重複剛纔的原子三次這樣的:\d\d\d

再次,您的語言可能會提供一個快捷方式:大括號({})。有時你必須用反斜槓(如果你使用sed或awk,請閱讀「擴展正則表達式」)轉義它們。他們還給你一種說法,「至少x,但不超過y原子的出現次數」:{x,y}

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

其次是 'CV',

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

後跟兩位數字,

我們alr Eady報道了這個問題:^b\d{3}cv\d{2}

然後下劃線,其次是「釋放」,其次是.'ext」

同樣,這都應該匹配字面上看,但圓點(.)是一個特殊字符。這意味着你必須用一個反斜槓來回避它:^\d{3}cv\d{2}_release\.ext

退出反斜槓意味着像「b410cv11_test_ext」這樣的文件名也會匹配,這對你來說可能是或者可能不是問題。

最後,如果您要保證「.ext」後面沒有任何內容,請將re重新定位到匹配的結尾處,請使用美元符號($)。

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

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

容易。

無論您使用何種語言或庫,都必須在文檔中的某處提供參考,以便向您說明您的案例中確切的語法應該是什麼。一旦你已經學會將問題分解成合適的描述,理解更高級的結構將逐步給你。

4

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

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

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

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

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

+0

非常感謝!會做。 – Amara 2008-11-21 21:16:38

1

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

另外,您認爲什麼是模式?當然,*(glob)或。*(正則表達式)將匹配該模式。此外,_test.ext(glob)或。 _test.ext(regexp)模式將與其他許多變體一樣。

例如,您可能會將其描述爲「b,後面是數字,後面是cv,後面是數字...」

O你可以用你的母語精確地解釋模式(這必須是你的第一步),通常這是一個相當直接的任務,可以將它轉換爲全局或正則表達式模式。

0

如果字母不重要,可以嘗試\ w \ d \ d \ d \ w \ w \ d \ d_test.ext,它可以匹配字母/數字模式,或者b \ d \ d \ dcv \ d \ d_test.ext或兩者的一些組合。

0

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

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

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

3

我想的圖案是作爲 如下:必須用「B」開始,由三位數字的隨後 ,後跟「CV」, 後跟兩個數字,那麼 下劃線,後跟'釋放「 其次.'ext」

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

你忘了逃避這段時間。 – titaniumdecoy 2008-11-22 07:55:47

+0

固定對你 – 2008-11-22 14:32:52

相關問題