代码之家  ›  专栏  ›  技术社区  ›  Mahabaleshwara Adiga

此日期需要Regex模式

  •  2
  • Mahabaleshwara Adiga  · 技术社区  · 9 年前

    我有日期字符串

      Date: April 1st, 2015
      Date: March 31st, 2015
      Date: March 26th, 2015
    

    我需要提取这个适合python datetime模式的日期。 我会的 '%B %d %Y' 作为python datetime模式。

    所以,我如何将上述字符串提取为datetime格式。 Regex输出应为:

    March 31 2015
    August 1 2014
    

    请帮助我构建漂亮的正则表达式模式。

    4 回复  |  直到 9 年前
        1
  •  1
  •   vks    9 年前
    ^.*?:\s*|[a-zA-Z]+,
    

    您可以使用 re.sub 为此,并替换为 empty string 。请参阅演示。

    https://regex101.com/r/sJ9gM7/42#python

    import re
    p = re.compile(r'^.*?:\s*|[a-zA-Z]+,', re.MULTILINE | re.IGNORECASE)
    test_str = " Date: April 1st, 2015\n Date: March 31st, 2015\n Date: March 26th, 2015"
    subst = ""
    
    result = re.sub(p, subst, test_str)
    
        2
  •  1
  •   Avinash Raj    9 年前

    尝试以下操作:

    Date:\s*(\w+)\s*(\d+)\w+,\s*(\d+)
    

    这将把日期的每个元素放在后续捕获的参数(1、2、3)中,通过x.group(n)语法可用。

    >>> ' '.join(re.match(r'Date:\s*(\w+)\s*(\d+)\w+,\s*(\d+)', 'Date: April 1st, 2015').groups())
    'April 1 2015'
    
        3
  •  0
  •   yamm    9 年前

    我会怎么做:

    date = 'Date: April 1st, 2015'
    import re
    regex = re.search(
        r'Date:\s([A-Z]{1}[a-z]*)\s([0-9]{1,2})[a-z]{2},\s([0-9]{4})',
        date,
    )
    parsed_date = ' '.join(regex.groups())
    from datetime import datetime
    date_time = datetime.strptime(parsed_date, '%B %d %Y')
    
    print date_time
    #output
    '2015-04-01 00:00:00'
    

    现在就把这个放进血液里,用日期做点什么;-)

        4
  •  0
  •   Mazdak    9 年前

    您可以使用 datetime.datetime.strptime strftime :

    >>> d=datetime.datetime.strptime('April 1 2015','%B %d %Y')
    datetime.datetime(2015, 4, 1, 0, 0)
    
    >>> d.strftime('%B %d %Y')
    'April 01 2015'