我有一个包含<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
答案 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