繁体   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