正则表达式:在文本

时间:2015-10-14 04:26:55

标签: python regex url findall

我特别喜欢REGEX和HTML。我知道BeautifulSoup是一种处理HTML的方法,但是想尝试正则表达式

我需要在文本中搜索HTML标签(我使用findall)。我在Stackoverflow中尝试了多个场景和示例,但只获得了[](空字符串)。这是我试过的:

#reHTML = r'(?:<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>)'
#reHTML = r'\<p>(.*?)\</p>'
#reHTML = r'<p>(.*?)\</p>'
#reHTML = r'<raw[^>]*?>(.*?)</raw>'

reHTML = r'<p>(.*?)</p>'

#reHTML = r'<.*?>'

rHTML = re.compile(reHTML, re.VERBOSE)

HTMLpara = rHTML.findall('http://pythonprogramming.net/parse-website-using- regular-expressions-urllib/', re.IGNORECASE)

显然,我错过了一些东西。请帮忙

2 个答案:

答案 0 :(得分:0)

这将在网页中读取并找到<html></html>的所有实例。这是您正在寻找的解决方案吗?

import re
import urllib2
url = "http://stackoverflow.com"
f = urllib2.urlopen(url)
file = f.read()
p = re.compile("<html>|</html>")
instances = p.findall(file)
print instances

输出:

['<html>', '</html>']

我认为您的问题是您尝试在网址字符串中搜索HTML标记,而不是实际加载网页并进行搜索。

答案 1 :(得分:0)

你误解了regex.findall(string[, pos[, endpos]])

HTMLpara = rHTML.findall('http://pythonprogramming.net/parse-website-using- regular-expressions-urllib/', re.IGNORECASE) 表示您将rHTML模式与字符串("http://pythonprogramming.net/parse-website-using- regular-expressions-urllib/")匹配,因此您将获得[]

您最好请求URL获取数据,然后调用findall分析结果字符串,如below

import urllib.request
import re

url = 'http://pythonprogramming.net/parse-website-using-regular-expressions-urllib/'

req = urllib.request.Request(url)
resp = urllib.request.urlopen(req)
respData = resp.read()
paragraphs = re.findall(r'<p>(.*?)</p>',str(respData))