正则表达式HTML标记排除

时间:2012-01-26 19:12:31

标签: python html regex beautifulsoup

是的,是的,我使用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 个答案:

答案 0 :(得分:2)

如果您的结果真的很简单,只要设置了re.DOTALL标志,以下正则表达式就会在捕获组1中放置“电话号码:”,在捕获组2中放置号码:

.*(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'