【问题标题】:Capture the date from emails using RegEx使用 RegEx 从电子邮件中捕获日期
【发布时间】:2017-04-25 06:20:12
【问题描述】:

以下是来自 3 封不同电子邮件的 3 个 sn-ps:

1) Subject: FW: NEFS 11 fish for lease
   From: Claire Fitz-Gerald 
   Date: 11/15/2013 3:02 PM

2) Subject: FW: NEFS 11 and 12 fish for lease
   From: Claire Fitz-Gerald 
   Date: 11/11/2013 4:09 PM

3) Subject: FW: NEFS 11 fish for lease
   From: Claire Fitz-Gerald 
   Date: 12/5/2013 4:23 PM

我正在尝试从这些电子邮件中获取日期,还有 100 多个,但似乎无法正确使用 RegEx。一方面,我不是 RegEx 的专家。但是我在 StackOverflow 上看到过类似的帖子,并尝试使用他们的代码,但由于某种原因它对我不起作用。

我的代码:

with open(file_path, 'r') as f:
pattern = re.compile("(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d")
        email = f.read()
        dates = pattern.findall(email)
        if dates:
            #print("Date:", ''.join(dates))
            print("Date:", ''.join(''.join(dates) for dates in dates))

我很困惑为什么这个 RegEx 似乎对其他人有效,但对我无效。我还尝试使用我在 SO 上找到的更深入的 RegEx:

re.compile("^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1}))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1})))$")

我只想在这些电子邮件中捕获日期,然后我可以担心以后将它们转换为正确的格式。任何帮助表示赞赏,谢谢。

【问题讨论】:

    标签: python regex email


    【解决方案1】:

    要捕获日期,您可以使用以下代码:

    regex = r"Date: (\d{1,2}\/\d{1,2}\/\d{4})"
    

    检查online demo

    【讨论】:

    • 效果几乎完美。它也记录了时间,有没有办法排除它?
    • 那是完美的。太感谢了。只是一个简单的问题:您是否因为您只是 RegEx 的专家而这么快就得出了这个答案?还是你谷歌了?或者是其他东西?我只是对自己变得更好的目的感到好奇
    • @theprowler 两者。我不擅长正则表达式,而且匹配日期并不难找到。我添加了一个您应该查看的链接
    【解决方案2】:

    我建议改为选择 Date: 行,并在 Date: 之后抓取字符串到行尾,然后使用日期解析器库,如 Parse date strings?

    【讨论】:

    • 我之前确实尝试过,但没有成功,这就是我转而尝试 RegEx 的原因。如果下面其他人的答案不起作用,我会再试一次
    • 如果您的日期将来可能会采用不同的格式或更改,那么dateutil.parser 可以提供一些额外的安全性。否则,正则表达式应该完全足够了。 :)
    • 如果确实出现了不同的格式,知道这一点非常好。非常感谢
    猜你喜欢
    • 2021-03-10
    • 2012-07-18
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2011-12-14
    相关资源
    最近更新 更多