我有一个文件名列表:

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/

10-14 13:40