正则表达式 - 包含日期格式的目标 - 获取其中的所有内容

时间:2018-01-22 17:49:25

标签: python regex

我有一个包含<td>标记的网页,例如

<td>Aug 17, 2017 02:00 PM EDT</td>

我尝试使用正则表达式来查找符合,格式的内容,然后是space然后four numbers,然后是space然后{{ 1}}然后two numbers然后: two numbers space two capital letters space。只是为了确保我总是瞄准那个日期而不是偶然得到别的东西。

我不认为该格式的另一个实例会发生,但我想要第一个实例。我想我可以抓住返回变量中的three capital letters位置,以确保我得到正确的日期。

到目前为止,我有以下正则表达式:

[0]

所以,在python代码中:

(?=\,\s\d{4}\s\d{2}\:\d{2}\s[A-Z]{2}\s[A-Z]{3})(.*)(?=\<\/td)

这让我很接近,但并不是很完整。它让我

date = re.findall(r'(?=\,\s\d{4}\s\d{2}\:\d{2}\s[A-Z]{2}\s[A-Z]{3})(.*)(?=\<\/td)', page)
print(date[0])

我需要

, 2017 02:00 PM EDT

但我无法弄清楚如何扩展正则表达式以获取所有td。谢谢你的帮助!

(顺便说一句,Python 3)

编辑 添加解码

Aug 17, 2017 02:00 PM EDT

2 个答案:

答案 0 :(得分:1)

Aug 17, 2017 02:00 PM EDT标记之间放置一个正则表达式组以匹配td

import re
s = "<td>Aug 17, 2017 02:00 PM EDT</td>"
new_s = re.findall('<td>([a-zA-Z]+\s\d+,\s\d{4}\s[0-9\:]+\s[a-zA-Z\s]+)</td>', s)[0]

输出:

'Aug 17, 2017 02:00 PM EDT'

答案 1 :(得分:1)

您忘记在第一个逗号之前抓取所有内容。

<td>(?=.*\,\s\d{4}\s\d{2}\:\d{2}\s[A-Z]{2}\s[A-Z]{3})(.*)(?=\<\/td)

另外,你必须在你的组之前将正则表达式中的空格开头,所以正则表达式不会抓住它。

Regex101测试: https://regex101.com/r/yxqE6Q/1