我有一个包含两种不同类型的日期/时间戳的文件。首先,我的日期/时间戳格式如下:
DATE : Fri, 20 Apr 2012 09:15:17 -0700 (PDT)
其次,我的时间戳格式如下:
12:24 PM
我写了两个正则表达式模式来处理这个问题:
full_pattern = re.compile('\w{3,4}\W\s\w{3}\s\d{4}\s\d\d:\d\d:\d\d')
time_pattern = re.compile(' \d:\d\d\s[\w]{2}')
这些是对话,所以我正在寻找一个输出,其中包含对话开始的日期和时间,然后是对话中每个项目的时间戳。其最终应用是在每次日期和时间匹配时使用 Arduino 微 Controller 启动一些东西(即:是 4 月 30 日和下午 1:01 吗?当时有消息吗?是的?好的,启动)。
我有两个问题:
第一个 pattern("full_pattern") 没有返回任何东西,我不明白为什么。我需要解决整行吗? (包括“DATE”位)?
如何一起使用它们?所以正则表达式找到第一个日期/时间戳然后打印出时间戳,找到下一个日期/时间戳然后打印出时间戳。像这样:
2012 年 4 月 20 日星期五 11:01:17 上午 11:01 上午 11:03
2012 年 4 月 20 日星期五 09:15:17 晚上 9:15 晚上 9:17
请注意:日期/时间戳是军用时间,其他时间是上午/下午
我试过像这样用管道输送它:
re.findall(pattern1 | pattern2, string)
但它不喜欢那样。我还尝试在 for 循环中同时运行它们,如下所示:
for line in string:
pattern1 = re.compile('\w{3,4}\W\s\w{3}\s\d{4}\s\d\d:\d\d:\d\d')
pattern2 = re.compile(' \d:\d\d\s[\w]{2}')
re.findall(pattern1, string)
re.findall(pattern2, string)
但这导致了所有 pattern2 的无限循环(可能不是无限的,绝对比我需要的多得多)。
非常感谢任何帮助,谢谢!
请您参考如下方法:
在线测试正则表达式有助于解决无法正常工作的正则表达式问题。我用了this one .
这是我用来解决您的问题的 Python:
import re
full_pattern = r'\w{3,4}\W\s\d{1,2}\s\w{3}\s\d{4}\s\d{2}:\d{2}:\d{2}'
time_pattern = r'\d{1,2}:\d{2}(\s(A|P)M)?'
combo_regex = '(%s)' % ('|'.join([full_pattern, time_pattern]),)
with open(r'C:\Users\spikem\file_with_two_different_types_of_dates.txt','r') as f:
for line in f:
p = re.search(combo_regex, line, re.IGNORECASE)
if p:
print p.group() # Assumes a max of one match per line
这里是一些示例输出:
Fri, 20 Apr 2012 09:15:17
12:24 PM
Tue, 10 Jan 2012 00:00:00
Fri, 20 Jan 2012 00:00:00
Mon, 30 Jan 2012 00:00:00
Thu, 09 Feb 2012 00:00:00
Sun, 19 Feb 2012 00:00:00
Wed, 29 Feb 2012 00:00:00
Sat, 10 Mar 2012 00:00:00
Tue, 20 Mar 2012 00:00:00
Fri, 30 Mar 2012 00:00:00
Mon, 09 Apr 2012 00:00:00
Thu, 19 Apr 2012 00:00:00
Sun, 29 Apr 2012 00:00:00
Wed, 09 May 2012 00:00:00
Sat, 19 May 2012 00:00:00
Tue, 29 May 2012 00:00:00
Fri, 08 Jun 2012 00:00:00
Mon, 18 Jun 2012 00:00:00
Thu, 28 Jun 2012 00:00:00
Sun, 08 Jul 2012 00:00:00
Wed, 18 Jul 2012 00:00:00
Sat, 28 Jul 2012 00:00:00
Tue, 07 Aug 2012 00:00:00
Fri, 17 Aug 2012 00:00:00
Mon, 27 Aug 2012 00:00:00
Thu, 06 Sep 2012 00:00:00
Sun, 16 Sep 2012 00:00:00
Wed, 26 Sep 2012 00:00:00
Sat, 06 Oct 2012 00:00:00
Tue, 16 Oct 2012 00:00:00
Fri, 26 Oct 2012 00:00:00
希望对您有所帮助。
