使用re module's sub 函数和split。
>>> input_string = "01-result.xls,2-result.xls,03-result.xls,05-result.xls"
>>> import re
>>> re.sub(r'(\d+)-(\w+)\.xls',r'\2\1',input_string)
'result01,result2,result03,result05'
>>> re.sub(r'(\d+)-(\w+)\.xls',r'\2\1',input_string).split(',')
['result01', 'result2', 'result03', 'result05']
不使用导入,您可以使用list comprehension
>>> [''.join(x.split('.')[0].split('-')[::-1]) for x in input_string.split(',')]
['result01', 'result2', 'result03', 'result05']
这里的算法是,我们在将字符串拆分为, 后循环遍历它。现在我们将. 上的单个单词和- 上的第一个元素分开。我们现在有了数字和单词,我们可以很容易地join.
list comp答案的完整解释-
要了解什么是列表理解,请阅读What does "list comprehension" mean? How does it work and how can I use it?
来回答,
在, 上拆分输入列表,为我们提供单个文件名的列表
>>> input_string.split(',')
['01-result.xls', '2-result.xls', '03-result.xls', '05-result.xls']
现在使用列表推导结构,我们可以遍历它,
>>> [i for i in input_string.split(',')]
['01-result.xls', '2-result.xls', '03-result.xls', '05-result.xls']
由于我们只需要文件名而不需要扩展名,因此我们使用. split 并取第一个值。
>>> [i.split('.')[0] for i in input_string.split(',')]
['01-result', '2-result', '03-result', '05-result']
现在,我们需要的是数字和名称两部分。所以我们又被-分开了
>>> [i.split('.')[0].split('-') for i in input_string.split(',')]
[['01', 'result'], ['2', 'result'], ['03', 'result'], ['05', 'result']]
现在我们在列表中有 [number, name],但是我们需要的格式是 "namenumber"。因此我们有两个选择
- 像
i.split('.')[0].split('-')[1]+i.split('.')[0].split('-')[0] 一样连接它们。这是一条不必要的漫长道路
- 反转它们并加入。我们可以使用切片来反转列表(参见How can I reverse a list in python?)和
str.join 像''.join(x.split('.')[0].split('-')[::-1]) 一样加入。
所以我们得到了最终的列表理解
>>> [''.join(x.split('.')[0].split('-')[::-1]) for x in input_string.split(',')]
['result01', 'result2', 'result03', 'result05']