我有一个文件名列表:
a = ['data_1-0.hamster.raw',
'data_0-0.hamster.raw',
'data_9-1.hamster.raw',
'data_2-0.hamster.raw',
'data_0-1.hamster.raw',
'data_0-10.hamster.raw',
'data_0-2.hamster.raw']
我想对这个列表进行排序,这样我就有了这个输出:
a = ['data_0-0.hamster.raw',
'data_0-1.hamster.raw',
'data_0-2.hamster.raw',
'data_0-10.hamster.raw',
'data_1-0.hamster.raw',
'data_2-0.hamster.raw',
'data_9-1.hamster.raw']
这是我制作的代码:
sorted(a, key=lambda f: int(re.search(r'-(\d+)[^-]*$', f).group(1)))
但是我对 re 语法有点困惑,这就是我得到的:
a = ['data_1-0.hamster.raw',
'data_0-0.hamster.raw',
'data_2-0.hamster.raw',
'data_9-1.hamster.raw',
'data_0-1.hamster.raw',
'data_0-2.hamster.raw',
'data_0-10.hamster.raw']
它似乎对连字符后的数字起作用,但对第一个数字不起作用。
最佳答案
您可以执行以下操作:
import re
pattern = re.compile('data_(\d+)-(\d+)')
a = ['data_1-0.hamster.raw',
'data_0-0.hamster.raw',
'data_9-1.hamster.raw',
'data_2-0.hamster.raw',
'data_0-1.hamster.raw',
'data_0-10.hamster.raw',
'data_0-2.hamster.raw']
result = sorted(a, key=lambda s: tuple(map(int, pattern.search(s).groups())))
print(result)
输出
['data_0-0.hamster.raw', 'data_0-1.hamster.raw', 'data_0-2.hamster.raw', 'data_0-10.hamster.raw', 'data_1-0.hamster.raw', 'data_2-0.hamster.raw', 'data_9-1.hamster.raw']
关于python - 为什么使用 re.search(r'regex').group() 进行短接不会被所有数字短接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53270645/