Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式-获取时间和日期_Python_Html_Regex_Twitter_Web Crawler - Fatal编程技术网

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解析器。我建议您安装:


这将查找所有
标记(至少)带有class
tweet 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