使用python re.compile和美丽的汤来匹配字符串

时间:2014-10-23 18:26:28

标签: python regex

我想在返回的http标头内找到一个url。根据{{​​3}},有一种方法可以使用soup.find_all(re.compile("yourRegex")来收集数组中的正则表达式匹配项。但是,我必须遗漏我的正则表达式中的某些内容,该正则表达式在beautiful soup的正则表达式查找中匹配,但不会匹配以下代码:

来自bs4 import BeautifulSoup 导入请求 进口重新 导入csv 导入json 进口时间 import fileinput import urllib2

data = urllib2.urlopen("http://stackoverflow.com/questions/16627227/http-error-403-in-python-3-web-scraping").read()
soup = BeautifulSoup(data)
stringSoup = str(soup)

#Trying to use compile 
print soup.find_all(re.compile("[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?"))

我已尝试将()放在正则表达式周围,并以r启动...我错过了什么是必要的?

我也一直在使用text editor that I am using,将[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?放在正则表达式部分中,将url放在另一部分中,但那里也没有匹配。 谢谢!

2 个答案:

答案 0 :(得分:2)

print re.findall(r"[a-zA-Z0-9\-\.]+\.(?:com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)+(?:[\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?",x)

试试这个。这对我有用。

x="""<!DOCTYPE html>

<html itemscope itemtype="http://schema.org/QAPage">

<head>
"""

输出:schema.org/QAPage

答案 1 :(得分:0)

你的正则表达式没有问题,但是你得到了这个概念。 find_all只搜索标签。
例如:
find_all(&#34; ^ b&#34;)这将给你所有以名字b
开头的标签 因此输出将标记为p,tbody,body等。
如果你把re.compile放在find_all中,它只会在标签元素中查找模式而不是整个html文档。
你需要使用vks解释的方法。