如何使用python根据句子中包含的日期对句子进行排序

时间:2019-05-30 06:12:43

标签: python regex sorting date

我有几段客户数据。每个段落均以dd.mm.yyyy hh:mm:ss开头。我需要根据其中包含的日期时间戳对这些段落进行排序

我需要为此使用python。我在python上尝试过正则表达式,但没有得到输出

代码:

*sep2 = '([0-3]?\d)[- \/.](0\d|1[0-2])[- \/.]((19|20)\d\d) ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)'  
text2 = text1.split(sep2)  
print(text2)*

输入包含未按日期分隔的段落。一段示例:

21.01.2017 09:05:56 abcsdfasklfvd 02.01.2017 09:05:56 afgdsfggv 

预期输出:

text2[0] = 21.01.2017 09:05:56 abcsdfasklfvd  
text2[1] = 02.01.2017 09:05:56 afgdsfggv

然后我想根据升序应用某些排序功能

预期输出:

sorted[0] = 02.01.2017 09:05:56 afgdsfggv  
sorted[1] = 21.01.2017 09:05:56 abcsdfasklfvd

1 个答案:

答案 0 :(得分:1)

from datetime import datetime 

text = ["21.01.2017 09:05:56 abcsdfasklfvd", "02.01.2017 09:05:56 afgdsfggv"]
sorted(text, key=lambda s: datetime.strptime(s[0:19], '%d.%m.%Y %H:%M:%S'))

如果模式dd.mm.yyyy hh:mm:ss没有出现在段落中,则可以使用

text1 = "21.01.2017 09:05:56 abcsdfasklfvd 02.01.2017 09:05:56 afgdsfggv"

text = list()
for d, t in zip(*[iter(re.split(r'(\d+.\d+.\d+ \d+:\d+:\d+)', text1)[1:])]*2):
    text.append(d + t)

sorted(text, key=lambda s: datetime.strptime(s[0:19], '%d.%m.%Y %H:%M:%S'))

def extract(s):
    try:
        return datetime.strptime(s, '%d.%m.%Y %H:%M:%S')        
    except (ValueError):
        return datetime.strptime(s, '%d/%m/%Y %H:%M:%S')
sorted(text, key=lambda s: extract(s[0:19]))