Python 使用正则表达式从html中提取facebook页面

Python 使用正则表达式从html中提取facebook页面,python,html,regex,Python,Html,Regex,我正在尝试使用html上的正则表达式搜索来获取网站facebook页面的地址 通常链接显示为 但有时地址会是http://www.facebook.com/some.other 有时是数字 目前我的正则表达式是 '(facebook.com)\S\w+' 但它不会抓住最后两个可能性 当我希望正则表达式搜索但不获取它时,它叫什么?(例如,我希望正则表达式与www.facbook.com部分匹配,但结果中不包含该部分,只包含它后面的部分。) 注意:我将python与re和urllib2一起使用,

我正在尝试使用html上的正则表达式搜索来获取网站facebook页面的地址

通常链接显示为

但有时地址会是
http://www.facebook.com/some.other

有时是数字

目前我的正则表达式是

'(facebook.com)\S\w+'
但它不会抓住最后两个可能性

当我希望正则表达式搜索但不获取它时,它叫什么?(例如,我希望正则表达式与www.facbook.com部分匹配,但结果中不包含该部分,只包含它后面的部分。)


注意:我将python与re和urllib2一起使用,如果我假设正确,url总是在双引号中。对吗

re.findall(r'"http://www.facebook.com(.+?)"',url)
总的来说,尝试用正则表达式解析html是个坏主意。我建议您使用类似
lxml.html
的html解析器来查找链接,然后使用
urlparse

>>> from urlparse import urlparse # in 3.x use from urllib.parse import urlparse
>>> url = 'http://www.facebook.com/some.other'
>>> parse_object = urlparse(url)
>>> parse_object.netloc
'facebook.com'
>>> parse_object.path
'/some.other'

在我看来,你的主要问题是你对正则表达式理解不够

fb_re = re.compile(r'www.facebook.com([^"]+)')
然后简单地说:

results = fb_re.findall(url)
为什么会这样:

在常规表达式中,括号中的部分是捕获的内容,您将www.facebook.com部分放在括号中,因此它没有得到任何其他内容

这里我使用了一个字符集
[]
来匹配其中的任何内容,我使用
^
操作符来否定它,这意味着不在该集中的任何内容,然后我给它一个
字符,因此它将匹配www.facebook.com之后的任何内容,直到它到达
,然后停止

注意-这会捕获嵌入的facebook链接,如果facebook链接仅以明文形式存在于页面上,您可以使用:

fb_re = re.compile(r'www.facebook.com(\S+)')
这意味着抓取任何非空白字符,因此一旦用完空白字符,它将停止

如果您担心链接以句点结尾,只需添加:

fb_re = re.compile(r'www.facebook.com(\S+)\.\s')

它告诉它搜索上面相同的内容,但是当它到达一个句子的结尾时停止,
后跟空格或enter。这样它仍然会抓取
/some.other
之类的链接,但是当你有
/some.other.
之类的内容时,它会删除最后一个

我会发布这篇文章。不需要转义
。因为您正在使用
作为字符串屏障。