簡體   English   中英

Python re.sub 與正則表達式

[英]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()的兩個調用來處理Allall 或者,如果文件名的其余部分始終為大寫,您可以使用:

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.

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