[英]Python re.sub with regex
需要 re.sub 中的正則表達式幫助。 在這種情況下,我什么都不替換(“”)
我當前的代碼:
file_list = ['F_5500_SF_PART7_[0-9][0-9][0-9][0-9]_all.zip',
'F_5500_SF_[0-9][0-9][0-9][0-9]_All.zip',
'F_5500_[0-9][0-9][0-9][0-9]_All.zip',
'F_SCH_A_PART1_[0-9][0-9][0-9][0-9]_All.zip']
foldernames = [re.sub('(\d{4})_All.zip', '', i) for i in file_list]
我想要達到的結果是:
foldernames = ['F_5500_SF_PART7','F_5500_SF','F_5500','F_SCH_A_PART1']
我認為部分復雜性是我的 file_list 中已經存在正則表達式。 希望更聰明的人可以提供幫助。
您不需要正則表達式,您正在刪除固定字符串。 所以你可以只使用str.replace()
方法。
foldernames = [i.replace('_[0-9][0-9][0-9][0-9]_All.zip', '').replace('_[0-9][0-9][0-9][0-9]_all.zip', '') for i in file_list]
需要對replace()
的兩個調用來處理All
和all
。 或者,如果文件名的其余部分始終為大寫,您可以使用:
foldernames = [i.upper().replace('_[0-9][0-9][0-9][0-9]_ALL.ZIP', '') for i in file_list]
Barmar 的回答最適合您的問題。 但是,如果您確實需要使用正則表達式(假設並非所有文件都具有相同的固定“[0-9][0-9][0-9][0-9]”字符串),那么您可以使用:
'_(\[[-\d]*\]){4}_[aA]ll.zip'
(如果在第一種情況下捕獲小寫“all”,則末尾的[aA]ll
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.