我需要制作一个正则表达式来从文本中获取时间和日期。 我试过了:
re.compile("title=\".* js-short-timestamp")
我只需要得到类似的东西:
21:14 - 2 de out de 2013
15:13 - 1 de out de 2013
14:16 - 1 de out de 2013
15:58 - 14 de set de 2013
16:06 - 13 de set de 2013
14:59 - 13 de set de 2013
12:43 - 13 de set de 2013
09:33 - 13 de set de 2013
obs :(我用了一些re.sub来获取这些东西) 但有时我会得到:
18:30 - 11 de jul de 2011 href=https://twitter.com/XXXXXXXX/status/90533484464054272
22:10 - 3 de jul de 2011 href=https://twitter.com/XXXXXXXXX/status/87689583726313472
我的文字示例:
(阻止第一个带有数据原始标题是我的问题,因为我得到了href ..而且我不想要它。)
<a data-original-title="16:06 - 17 de jun de 2013" href="https://twitter.com/XXXXXXXX/status/346705537934712832" class="tweet-timestamp js-permalink js-nav js-tooltip"><span class="_timestamp js-short-timestamp " data-time="1371496016" data-long-form="true">17 de jun</span></a>
</small>
<a href="https://twitter.com/XXXXXXXX/status/407906654579998720" class="tweet-timestamp js-permalink js-nav js-tooltip" title="14:18 - 3 de dez de 2013">span class="_timestamp js-short-timestamp " data-time="1386087499" data-long-form="true">3 de dez</span></a>
答案 0 :(得分:2)
您正在尝试使用正则表达式解析HTML,rarely ends well。
我会使用HTML解析器。我建议您安装BeautifulSoup:
from bs4 import BeautifulSoup
soup = BeatifulSoup(html_page_source)
timestamps = soup.find_all('a', class=_'tweet-timestamp', {'data-original-title': True})
for timestamp in timestamps:
print timestamp['data-original-title']
这会找到包含({至少)类<a>
和tweet-timestamp
属性的所有data-original-title
标记,然后打印该属性。
答案 1 :(得分:0)
这应该是一个更好的正则表达式使用
time_re = re.compile(r'data-original-title="([^"]+).*js-short-timestamp')
然后你可以使用findall
time_re.findall(s) # where s is you html string
编辑:
做两个版本你需要一个更复杂的正则表达式
time_re = re.compile(r'data-original-title="([^"]+).*js-short-timestamp|tweet-timestamp.*title="([^"]+)"')
[filter(None, x)[0] for x in time_re.findall(s)] # where s is your html string