gpt4 book ai didi

python - 为什么使用 re.search(r'regex').group() 做空不会做空所有数字

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:46 24 4
gpt4 key购买 nike

我有一个文件名列表:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com