正则表达式中的美丽汤get_text()输出

时间:2014-01-05 00:29:25

标签: python regex beautifulsoup

我正在尝试从网页中提取一些信息。我使用Beautiful Soup的get_text方法来获取文本,但是当我尝试通过正则表达式传递该文本时,没有返回任何内容。

import urllib2
from bs4 import BeautifulSoup
import re

url = "http://www.somesite.com"
page = BeautifulSoup(urllib2.urlopen(url))
info = {}
info['description'] = page.get_text()
print info['description'] #this works fine
print re.match(r'.',info['description'],re.UNICODE).group()

返回无。

1 个答案:

答案 0 :(得分:2)

好的,这可能是正在发生的事情(但是我还没有检查过这是否真的如此,因为我的机器上没有Python 2而且无法在Python 3中重现这一点)。如果您查看re.match的文档,您会发现它显示为:

  

re.match模式字符串标志= 0

     

如果 string 开头的零个或多个字符与正则表达式 pattern 匹配,则返回相应的MatchObject实例。如果字符串与模式不匹配,则返回None;请注意,这与零长度匹配不同。

重点:re.match仅匹配字符串的开头

接下来,点字符.

  

'.'

     

(点。)在默认模式下,它匹配除换行符之外的任何字符。如果指定了DOTALL标志,则匹配任何字符,包括换行符。

因此,.与换行符不匹配。问题在于 - 如果info['description']以换行符开头,则不会得到匹配。

您应该使用re.search或将re.DOTALL标记传递给re.match