【问题标题】:Extracting dates out of python array of string using regex使用正则表达式从python字符串数组中提取日期
【发布时间】:2017-11-29 14:59:48
【问题描述】:

我正在尝试使用 python 从字符串中提取日期。日期格式为 mm-dd-yyyy。所以我知道正则表达式应该类似于 /d{2}-/d{2}-/d{4}。但是,当我尝试遍历下面的数组时,我无法从字符串中提取日期。

import re 
logs = ["First entry to journal logs. (01-01-2015)", "Last entry to journal logs 07-01-2016"]
for i in logs:
    m = re.match("/d{2}-/d{2}-/d{4}",i)
    print m.group(0)

我之前没有使用过 re,所以不确定我是否正确使用它。

【问题讨论】:

  • 正则表达式转义符号是\,而不是/。提取所有匹配 use re.findall.
  • 反斜杠而不是正斜杠:\d 不是 /d
  • 我尝试了 \d{2}-\d{2}-\d{4} 但我得到任何值的字符串注释
  • @codeBarer 在字符串前面放一个r,这样它就是r"\d{2}-\d{2}-\d{4}"
  • @codeBarer 您还想使用search 而不是match。后者锚定在字符串的开头,这样您的正则表达式变为^\d{2}-\d{2}-\d{4},而前者搜索字符串中的任何位置

标签: python regex


【解决方案1】:

这应该可以解决问题:

import re

s = ["First entry to journal logs. (01-01-2015)", "Last entry to journal logs 07-01-2016"]

print([re.findall(r'\d{2}\-\d{2}\-\d{4}', i) for i in s])

产量:

[['01-01-2015'], ['07-01-2016']]

【讨论】:

    【解决方案2】:

    你不能使用 ma​​tch 在文本内搜索,如果你使用 match 你需要从初始位置匹配到最终位置,在文本内搜索使用 search

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    import re
    logs = ["First entry to journal logs. (01-01-2015)", "Last entry to journal logs 07-01-2016"]
    for i in logs:
        m = re.search("[0-9]{2}\-[0-9]{2}\-[0-9]{4}",i)
        if m:
            print m.group(0)
    

    输出:

    01-01-2015
    07-01-2016
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多