Python re.sub with regex



re.sub中的regex需要帮助。在本例中,我将替换为nothing (")

我的当前代码:

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']

我认为部分复杂性的事实是,已经有regex在我的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'

(if结尾的[aA]ll,用于捕获小写的"all"在你的第一个案例中)

最新更新