2017-08-19 48 views
-3

所以我在做一個項目,我不得不編寫一個程序打開文件夾中的所有.rtf文件,並搜索與用戶提供的正則表達式匹配的任何行,並且結果必須打印到屏幕上。如何使一個正則表達式匹配任何以.rtf結尾的文件?

該代碼很容易,但我很難寫一個正則表達式匹配任何以.rtf結尾的文件。

這裏是一個文件夾內的所有文件中,Python會與.rtf結尾的文件搜索的字符串

rxn of glucose.png Screen Shot 2017-07-17 at 8.25.30 AM.png Screen Shot 2017-08-18 at 11.23.21 AM.png Screen Shot 2017-08-18 at 11.36.27 AM.png Screen Shot 2017-08-19 at 6.06.19 AM.png SSS.rtf Untitled 2.rtf Untitled 3.rtf Untitled 4.rtf Untitled.rtf

我試過很多的正則表達式,如:https://regex101.com/r/oZzN6T/1

2)[a-zA-Z0-9].rtf

https://regex101.com/r/RaeL0Z/1

3).+\.rtf

1)(\w+\.rtf)

它的結果看看個

https://regex101.com/r/8hRIGo/1

期望的結果是:Untitled 2.rtf Untitled 3.rtf Untitled 4.rtf Untitled.rtf SSS.rtf但一些正則表達式的上方匹配這些文件的某些部分和其他人相匹配的整個文本本身!

這些正則表達式都不能正常工作。我明白,他們爲什麼不工作,但我無法修復它們。我應該如何修改它們或者其他什麼應該是新的正則表達式,以匹配給定字符串中的擴展名爲.rtf的文件?

+0

@JonUleis它匹配整個文本,就像我的正則表達式 –

+3

之一爲什麼地球上,你在**串有** ??? –

+0

@jordanm,因爲我還沒有研究過它。另外,你不覺得'str.endswith('。rtf')'會匹配整個字符串嗎? –

回答

2

我要提的是,這似乎像蟒蛇一個工作,這結束的.rtf,但這裏是我想出了回答你的問題僅使用正則表達式:

((?<=\.\w{3})|^)[\w ]+\.rtf

這成功地找到所有文件擴展名「的.rtf」,甚至在字符串的開頭,由開始看起來無論是最新的文件名結束後,或者在開始時Ť他串。但是,這確實假定所有的文件擴展名都是3個字符。如果您的文件擴展名長度爲2(例如,*.7z)或其他內容,則應在第一個左括號之後添加(?<=\.\w{2})|(或任何其他文件長度)。這將使你:

((?<=\.\w{2})|(?<=\.\w{3})|^)[\w ]+\.rtf

0

比賽所有可打印字符不區分大小寫

/^[ -~]\.rtf$/i 
+0

它不起作用:( –

+0

在* nix中,不可打印的字符對文件名有效,只有兩個無效的是'\ 0'和'/'。 – jordanm

相關問題