Нужна помощь в разборе HTML с регулярным выражением в Python - PullRequest
1 голос
/ 27 марта 2010

Моя строка

mystring = "<tr><td><span class='para'><b>Total Amount : </b>INR (Indian Rupees) 
100.00</span></td></tr>"

Моя проблема в том, что я должен найти и получить общую сумму

test = re.search("(Indian Rupees)(\d{2})(?:\D|$)", mystring)

но мой тест не дал мне ничего. Как я могу получить значения и значения могут быть 10,00, 100,00, 1000,00

Спасибо

Ответы [ 3 ]

7 голосов
/ 27 марта 2010

Я настоятельно рекомендую использовать для этого настоящий HTML-анализатор вместо пользовательского регулярного выражения.

Вот пример с библиотекой BeautifulSoup :

from BeautifulSoup import BeautifulSoup

str = r'''
<tr><td><span class='para'><b>Total Amount : </b>INR (Indian Rupees) 100.00</span></td></tr>
'''

soup = BeautifulSoup(str)

amount = soup.findAll('span', attrs={'class': 'para'})
amount_tokens = amount[0].text.split()
print amount_tokens[-1]
3 голосов
/ 27 марта 2010

Я второй ответ Илая - вам лучше использовать HTML-парсер.

Лично я настоятельно рекомендую lxml библиотеку для анализа HTML: http://lxml.de/

Это очень быстро и многофункционально.

from lxml.html import fromstring

s = """
<tr><td><span class='para'><b>Total Amount : </b>INR (Indian Rupees)
100.00</span></td></tr>
"""

doc = fromstring(s)
for span in doc.cssselect('span.para'):
    print span.text_content().split()[-1]
1 голос
/ 27 марта 2010

Я согласен, что парсер - это отличный способ, но раз вы спросили, как это сделать с помощью регулярных выражений, вот способ:

mystring = """<tr><td><span class='para'><b>Total Amount :
</b>INR (Indian Rupees) 100.00</span></td></tr>"""

test = re.search("\(Indian Rupees\) ([^<]+)", mystring)

Тогда вы получите номер с:

test.group(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...