首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用re.search(r‘’regex‘).group()做空并不是所有数字都短

为什么使用re.search(r‘’regex‘).group()做空并不是所有数字都短
EN

Stack Overflow用户
提问于 2018-11-12 21:52:40
回答 5查看 114关注 0票数 3

我有一个文件名列表:

代码语言:javascript
复制
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']

我想对这个列表进行排序,这样我就有了这样的输出:

代码语言:javascript
复制
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']

这就是我做的代码:

代码语言:javascript
复制
sorted(a, key=lambda f: int(re.search(r'-(\d+)[^-]*$', f).group(1)))

但我对re语法有点困惑,这就是我所得到的:

代码语言:javascript
复制
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']

它似乎是为连字符后面的数字做的,而不是为第一个数字做的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-11-12 21:56:30

你可以这样做:

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
['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']
票数 2
EN

Stack Overflow用户

发布于 2018-11-12 21:57:17

这个排序键可能应该作为一个常规函数来编写。

代码语言:javascript
复制
import re

def sortkey(string):
    numbering = re.search('\d+-\d+', string).group()
    first, second = map(int, numbering.split('-'))
    return first, second

演示:

代码语言:javascript
复制
>>> 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']
...:     
>>> sorted(a, key=sortkey)
>>> 
['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']
票数 1
EN

Stack Overflow用户

发布于 2018-11-12 21:56:23

使用.sort()函数

代码语言:javascript
复制
 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.sort()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53270645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档