2014-02-06 2 views
1

Мне нужно сделать регулярное выражение, чтобы взять время и дату из текста. Я пробовал:Регулярное выражение Python - получить время и дату

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 

набл: (я использовал некоторые 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 

Пример моего текста:

(набл первым с-данных или iginal титульный моя проблема, потому что я получаю 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> 
+1

Почему бы не использовать H TML-анализатор вместо этого? –

ответ

0

Это должно быть лучше регулярное выражение для использования

time_re = re.compile(r'data-original-title="([^"]+).*js-short-timestamp') 

, а затем вы можете использовать FindAll

time_re.findall(s) # where s is you html string 

EDIT:

делать обе версии, нужно более сложное регулярное выражение

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 
+0

Очень хорошо! Но у меня есть два типа текста, например, , один с заголовком данных, а другой - только с заголовком. Есть способ собрать их вместе? посмотрите мой пример там, вы можете увидеть, что им говорит о том, что им говорит о – user2333163

+0

Возможно, вам лучше с помощью анализатора html, как указал @Martjin ... но для регулярного выражения я обновил свой ответ на работу для обоих. Проблема со вторым - это класс перед attr (и твиттер может изменить свой формат в любое время, поэтому использование парсера HTML всегда будет работать). – Pykler

+0

Я изменил ваше выражение на re.compile (r'title = "([^"] +). * Js-short-timestamp ') И теперь все в порядке, спасибо! – user2333163

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, затем выводит этот атрибут.

Смежные вопросы