Python 在正则表达式中获取_text()输出

Python 在正则表达式中获取_text()输出,python,regex,beautifulsoup,Python,Regex,Beautifulsoup,我试图从网页中提取一些信息。我使用的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 inf

我试图从网页中提取一些信息。我使用的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()

返回None。

好的,下面可能是发生的情况(但我没有检查是否确实是这样,因为我的机器上没有Python 2,也无法在Python 3中重现)。如果您查看文档,您会发现它的内容如下:

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

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

要点:
re.match
仅在字符串开头匹配

接下来,点字符

”。

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

因此,
与换行符不匹配。这就是问题所在-如果
info['description']
以换行符开头,您将无法获得匹配项


您应该做的是使用
re.search
或将
re.DOTALL
标志传递到
re.match

您真的打算将
r.
作为
re.match
的第一个参数吗?是的。这样不行吗?我当然希望进行更复杂的匹配,但我甚至无法实现这一点。我不熟悉python中字符串文本前面的
r
。它应该是什么意思?你想用正则表达式从字符串中提取什么?@PeterAlfvin
r
在Python中的字符串文本前面,允许你输入反斜杠而不转义,这对正则表达式很有用。