【问题标题】:Extract date from email using python 2.7 regex使用 python 2.7 正则表达式从电子邮件中提取日期
【发布时间】:2017-09-20 14:54:11
【问题描述】:

我尝试了许多正则表达式代码来从具有这种格式的电子邮件中提取日期,但我不能:

Date: Tue, 13 Nov 2001 08:41:49 -0800 (PST)
Sent: Thursday, November 08, 2001 10:25 AM

这是所有电子邮件中的样子,我想将它们都提取出来。

提前谢谢你

【问题讨论】:

  • 你尝试了什么,什么没用?

标签: python regex date


【解决方案1】:

你可以用这种模式做这样的事情:

使用 Python3:

import re
data = "Date: Tue, 13 Nov 2001 08:41:49 -0800 (PST)"
final = re.findall(r"Date: (\w+), ([0-9]+) (\w+) ([0-9]+)", data)
print("{0}, {1}".format(final[0][0], " ".join(final[0][1:])))
print(" ".join(final[0][1:]))

使用 Python2:

import re
data = "Date: Tue, 13 Nov 2001 08:41:49 -0800 (PST)"
final = re.findall(r"Date: (\w+), ([0-9]+) (\w+) ([0-9]+)", data)
print "%s, %s" % (final[0][0], " ".join(final[0][1:]))
print " ".join(final[0][1:])

输出:

Tue, 13 Nov 2001
13 Nov 2001

编辑:

快速回答您的问题的新更新,您可以这样做:

import re 

email = '''Date: Tue, 13 Nov 2001 08:41:49 -0800 (PST)
Sent: Thursday, November 08, 2001 10:25 AM'''
data = email.split("\n")

pattern = r"(\w+: \w+, [0-9]+ \w+ [0-9]+)|(\w+: \w+, \w+ [0-9]+, [0-9]+)"

final = []
for k in data:
    final += re.findall(pattern, k)

final = [j.split(":") for k in final for j in k if j != '']
# Python3 
print(final)
# Python2
# print final

输出:

[['Date', ' Tue, 13 Nov 2001'], ['Sent', ' Thursday, November 08, 2001']]

【讨论】:

  • 另外,我想在电子邮件正文中提取此日期 发送时间:星期四,2001 年 11 月 8 日上午 10:25 我如何才能同时提取它们?
  • 请编辑您的问题并发布您的电子邮件数据示例,我将编辑我的答案以满足您的需求。
  • 我已经更新了我的答案。如果有任何反馈,请立即查看并返回。
【解决方案2】:

如果只提取相同的字符串模型,您可以使用split(),而不是使用正则表达式:

email_date = "Date: Tue, 13 Nov 2001 08:41:49 -0800 (PST)"
email_date = '%s %s %s %s' % (tuple(email_date.split(' ')[1:5]))

输出:

Tue, 13 Nov 2001

【讨论】:

    【解决方案3】:

    我不是正则表达式专家,但这里有一个解决方案,您可以为此编写一些测试

    d = "Date: Tue, 13 Nov 2001 08:41:49 -0800 (PST)"
    dates = [re.search('(\d+ \w+ \d+)',date).groups()[0] for date in re.search('(Date: \w+, \d+ \w+ \d+)', d).groups()]
    

    ['2001 年 11 月 13 日']

    【讨论】:

      【解决方案4】:
      import re
      
      my_email = 'Date: Tue, 13 Nov 2001 08:41:49 -0800 (PST)'
      
      match = re.search(r': (\w{3,3}, \d{2,2} \w{3,3} \d{4,4})', my_email)
      print(match.group(1))
      

      【讨论】:

      • 虽然欢迎使用此代码 sn-p,并且可能会提供一些帮助,但它会是 greatly improved if it included an explanation of 如何解决这个问题。没有这个,你的回答就没有多少教育价值了——记住你是在为未来的读者回答这个问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
      猜你喜欢
      • 2017-09-20
      • 2018-12-04
      • 2017-09-24
      • 2018-08-11
      • 2021-11-24
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2016-04-28
      相关资源
      最近更新 更多