Python正则表达式-获取时间和日期
我需要做一个正则表达式,从文本中提取时间和日期。 我试过: 我只需要像这样的东西:Python正则表达式-获取时间和日期,python,html,regex,twitter,web-crawler,Python,Html,Regex,Twitter,Web Crawler,我需要做一个正则表达式,从文本中提取时间和日期。 我试过: 我只需要像这样的东西: 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 ob
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
我的文本示例:
(obs第一个使用a-data-original-title是我的问题,因为我得到了href..,我不想要它。)
您试图用正则表达式解析HTML,这是一个错误 我会使用HTML解析器。我建议您安装:
这将查找所有
标记(至少)带有classtweet timestamp
和数据原始标题
属性,然后打印该属性。这应该是一个更好的正则表达式
time_re = re.compile(r'data-original-title="([^"]+).*js-short-timestamp')
然后你可以用芬德尔
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
为什么不使用HTML解析器呢?它非常好!但是,我有两种文本类型,一种是数据原始标题,另一种是只有标题。有办法把它们结合在一起吗?看看我的例子,你可以看到我在说什么,你可能会更好地使用html解析器,正如@Martjin所指出的。。。但是对于一个正则表达式,我更新了我的答案,使之对两者都适用。第二个问题是类在attr之前(twitter可能随时更改其格式,因此使用HTML解析器将始终有效)。我更改了re.compile的表达式(r'title=“([^”]+).*js short timestamp”),现在一切正常,谢谢!是的,因为js short timestamp类被附加到第二种类型的内部元素,所以这也可以工作。
time_re = re.compile(r'data-original-title="([^"]+).*js-short-timestamp')
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