Исключение HTML-тегов из регулярных выражений - PullRequest
0 голосов
/ 26 января 2012

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

from BeautifulSoup import BeautifulSoup
from urllib import urlopen

tempSite = 'http://www.sumkindawebsiterighthur.com'
theTempSite = urlopen(tempSite).read()
currentTempSite = BeautifulSoup(theTempSite)
Email = currentTempSite.findAll('tr', valign="top") 
print Email[0] 

В настоящее время результаты с:

<tr valign="top">
<td><p>Phone Number:</p></td>
<td>&nbsp;</td>
<td><p>706-878-8888</p></td>
</tr>

Я пытаюсь удалить всю разметку (tr, td, p, тоже было бы неплохо) и результат:

Phone Number: 706-878-8888

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

1 Ответ

2 голосов
/ 26 января 2012

Если ваши результаты действительно всегда так просты, следующее регулярное выражение поместит «Номер телефона:» в группу захвата 1 и номер в группе захвата 2, если установлен флаг re.DOTALL:

.*(Phone Number:).*?([-\d]+).*

Затем вы можете вызвать re.sub() в вашей строке с заменой \1 \2.

Вот полный пример, который возвращает то, что вы хотите:

>>> s = """<tr valign="top">
... <td><p>Phone Number:</p></td>
... <td>&nbsp;</td>
... <td><p>706-878-8888</p></td>
... </tr>"""
>>> regex = re.compile(r'.*(Phone Number:).*?([-\d]+).*', re.DOTALL)
>>> regex.sub(r'\1 \2', s)
'Phone Number: 706-878-8888'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...