Python 在正则表达式中获取_text()输出
我试图从网页中提取一些信息。我使用的get_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
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
。它应该是什么意思?你想用正则表达式从字符串中提取什么?@PeterAlfvinr
在Python中的字符串文本前面,允许你输入反斜杠而不转义,这对正则表达式很有用。