【问题标题】:convert element and next element in list of strings to date in python将字符串列表中的元素和下一个元素转换为python中的日期
【发布时间】:2017-05-13 19:11:50
【问题描述】:

我是 Python 新手,遇到以下字符串问题:

立即订购,4 月 25 日(星期二)免费送货,或在 4 月 29 日星期二的珠宝首饰。

我已将其转换为带有.split() 的字符串列表。但是,我不知道如何遍历列表以提取日期,例如 4 月 25 日和 4 月 29 日。一旦我拉出这些字符串,我知道我可以将它们转换为带有 datetime.strptime(string, '%B %d')string 的日期格式是“4 月 25 日”和“4 月 29 日”,可以应用日期差异函数。

我想我需要将包含月份名称作为字符串的两个列表元素和下一个带有月份日期的元素都提取出来,以将它们组合起来,以便将它们转换为日期格式。

任何帮助将不胜感激。先感谢您。

【问题讨论】:

    标签: python regex string date


    【解决方案1】:

    在这里赞美正则表达式的力量:

    import re
    from datetime import datetime
    
    s = "Order now for free delivery loose on Tuesday, April 25 or set in jewelry on Tuesday, April 29."
    
    # regex looking for dates in the given format
    rx = re.compile(r'''
                (?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day),\s+
                (?:January|February|March|April|May|June|July|August|September|October|November|December)\s+
                \d+
                ''', re.VERBOSE)
    
    dates = [datetime.strptime("{} #{}".format(m.group(0), "2017"), '%A, %B %d #%Y') 
            for m in rx.finditer(s)]
    print(dates)
    # [datetime.datetime(2017, 4, 25, 0, 0), datetime.datetime(2017, 4, 29, 0, 0)]
    

    【讨论】:

    • 这是正确的做法。你也可以使用dateparser库来解析日期。
    【解决方案2】:

    如果它适用于当前 2017 年,解决方案使用
    calendar.day_name(星期几),
    calendar.month_name(一年中的月份)
    datetime.strptime()函数:

    import calendar, datetime
    
    s = 'Order now for free delivery loose on Tuesday, April 25 or set in jewelry on Tuesday, April 29'
    day_names = '|'.join(list(calendar.day_name))  # Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday
    month_names = '|'.join(list(calendar.month_name[1:]))
    dates = re.findall(r'((' + day_names + '), (' + month_names + ') \d{1,2})', s)
    datetimes = [datetime.datetime.strptime(d[0] + ' 2017', '%A, %B %d %Y') for d in dates]
    
    print(datetimes)
    

    输出:

    [datetime.datetime(2017, 4, 25, 0, 0), datetime.datetime(2017, 4, 29, 0, 0)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-26
      • 2019-12-07
      • 2011-01-08
      • 2022-01-19
      • 1970-01-01
      • 2017-08-21
      • 2023-04-07
      • 2018-05-07
      相关资源
      最近更新 更多