2013-04-15 5 views
0

У меня есть следующие строки вводаизвлечения строки с использованием регулярных выражений

input= """href="http://www.sciencedirect.com/science/article/pii/S0167923609002097" onmousedown="return scife_clk(this.href,'','res','2')">Using <b>text mining </b>and sentiment analysis for online forums hotspot detection and forecast</a></h3><div class="gs_a">N Li, <a href="/citations? 
    href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3309177/" onmousedown="return scife_clk(this.href,'ggp','res','1')">How to link ontologies and protein–protein interactions to literature: <b>text</b>-<b>mining </b>approaches and the BioCreative experience</a></h3><div class="gs_a"><a href="/citations? 
    href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3309177/" onmousedown="return scife_clk(this.href,'gga','gga','1')"><span class="gs_ggsL"><span class=gs_ctg2>[HTML]</span> from nih.gov</span><span class="gs_ggsS">nih.gov <span """ 

Я хочу, чтобы извлечь следующий вывод из этого:

>> Using <b>text mining </b>and sentiment analysis for online forums hotspot detection and forecast 
>> How to link ontologies and protein–protein interactions to literature: <b>text</b>-<b>mining </b>approaches and the BioCreative experience 

Я пытаюсь использовать пакет повторно в питона, но я неясно, какое регулярное выражение использовать, поскольку существует несколько шаблонов, таких как:

(this.href,'','res','2')"> or (this.href,'ggp','res','2')"> or (this.href,'gga','gga','2')"> 

Я используя это регулярное выражение:

=re.search(r"(this.href,'ggp.?','res','.?/D')" 

Но это не работает для меня. Может ли кто-нибудь сказать, что использовать?

+3

Почему бы вам не использовать парсер HTML? регулярные выражения здесь не являются правильным инструментом. –

+0

, какой HTML-парсер использовать? –

ответ

1

Это работает с вашим примером:

input= """\ 
href="http://www.sciencedirect.com/science/article/pii/S0167923609002097" onmousedown="return scife_clk(this.href,'','res','2')">Using <b>text mining </b>and sentiment analysis for online forums hotspot detection and forecast</a></h3><div class="gs_a">N Li, <a href="/citations? 
href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3309177/" onmousedown="return scife_clk(this.href,'ggp','res','1')">How to link ontologies and protein–protein interactions to literature: <b>text</b>-<b>mining </b>approaches and the BioCreative experience</a></h3><div class="gs_a"><a href="/citations? 
href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3309177/" onmousedown="return scife_clk(this.href,'gga','gga','1')"><span class="gs_ggsL"><span class=gs_ctg2>[HTML]</span> from nih.gov</span><span class="gs_ggsS">nih.gov <span """ 

import re 

for line in input.splitlines(): 
    m=re.search(r'onmousedown=.*?">(.*)</a>',line) 
    if m: 
     print(m.group(1)) 

распечаток:

Using <b>text mining </b>and sentiment analysis for online forums hotspot detection and forecast 
How to link ontologies and protein–protein interactions to literature: <b>text</b>-<b>mining </b>approaches and the BioCreative experience 

Имейте в виду, что с помощью Regex с HTML потенциально минное поле (! Или ум поля) и обычно рекомендуется использовать синтаксический анализатор. Но с помощью фрагментов вы можете заставить его работать ...

+0

Это не сработает, если в одной строке есть два или более '' тегов. –

1

Вам будет намного лучше использовать достойный HTML-анализатор. Используйте BeautifulSoup, например:

from bs4 import BeautifulSoup 

soup = BeautifulSoup(input) 

for link in soup.find_all('a', onmousedown=True): 
    print link.text 

, который находит все <a> элементы с атрибутом onmousedown.

+0

Большое спасибо. Я попробую это также –

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