list = ['xxxx ResultDatetime:2017-05-31 09:38:00.000:ResultDatetime', 'xxxx ResultDatetime:2017-05-26 15:36:00.000:ResultDatetime', 'yyyyy' ResultDatetime:2017-10-23 16:16:00.000:ResultDatetime]
datet = re.compile(r'ResultDatetime:(\d{4}-\d{2}-\d{2} \d{2}:\d{2})')
list.sort(key = lambda x: ........)
我想从最早的日期开始对列表进行排序。我应该如何使用lambda和regex进行处理?
答案 0 :(得分:1)
有了代码,您就可以做到:
list.sort(key=lambda x: datet.search(x).group(1))
(但请不要使用list
作为变量名)。
由于已采用自然排序的格式,因此无需将提取的字符串转换为datetime
。
但是请注意,如果任何字符串与正则表达式都不匹配,则会产生错误,因此,最好将键拆分为一个命名的多行函数,并在返回匹配的组之前测试是否成功匹配。 / p>
def sort_key(line):
match = datet.search(line)
if match:
return match.group(1)
return ''
data = [
'xxxx ResultDatetime:2017-05-31 09:38:00.000:ResultDatetime',
'xxxx ResultDatetime:2017-05-26 15:36:00.000:ResultDatetime',
'yyyyy ResultDatetime:2017-10-23 16:16:00.000:ResultDatetime'
]
data.sort(key=sort_key)
答案 1 :(得分:0)
您可以使用dateutil.parser.parse
(请参见答案:Parse date strings?)来解析日期,并使用re.findall
从字符串中获取日期
import re
from dateutil.parser import parse
list = ['xxxx ResultDatetime:2017-05-31 09:38:00.000:ResultDatetime', 'xxxx ResultDatetime:2017-05-26 15:36:00.000:ResultDatetime', 'yyyyy ResultDatetime:2017-10-23 16:16:00.000:ResultDatetime]
datet = re.compile(r'ResultDatetime:(\d{4}-\d{2}-\d{2} \d{2}:\d{2})')
list.sort(key = lambda x : parse(re.findall(datet, x)[0]))
答案 2 :(得分:0)
我认为没有任何导入的最简单解决方案是:
data = ['xxxx ResultDatetime:2017-05-31 09:38:00.000:ResultDatetime',
'xxxx ResultDatetime:2017-05-26 15:36:00.000:ResultDatetime',
'yyyyy ResultDatetime:2017-10-23 16:16:00.000:ResultDatetime']
sorted_data = sorted(data, key=lambda x: x[20:36])
print(sorted_data)
输出:
['xxxx ResultDatetime:2017-05-26 15:36:00.000:ResultDatetime',
'xxxx ResultDatetime:2017-05-31 09:38:00.000:ResultDatetime',
'yyyyy ResultDatetime:2017-10-23 16:16:00.000:ResultDatetime']