【问题标题】:Regex: searching for HTML tags in the text正则表达式:在文本中搜索 HTML 标签
【发布时间】:2015-10-14 04:26:54
【问题描述】:

我对 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)

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

【问题讨论】:

  • 你的意思是搜索网页的内容吗?现在你只是在搜索 URL。
  • @digitaLink - HTML 标签而不是完整内容。我确定我搞砸了。非常新的正则表达式:)
  • 使用像crummy.com/software/BeautifulSoup/bs4/doc这样的html解析器而不是正则表达式。

标签: python regex url findall


【解决方案1】:

你误会了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))

【讨论】:

  • 您能否澄清一下,“请求 URL”是什么意思?对不起,一个愚蠢的问题,但正则表达式对我来说很新
  • @Toly 我的意思是你应该通过 url 获取 html 页面数据,然后正则表达式数据。 findall 使用第一个参数作为字符串,它不会通过您的 url 获取数据,您的代码是否意味着您想要匹配 url 字符串的模式。
  • 在一些好人的帮助下,我想到了这一点。这是一个很好的观点!我只是个新手,正在学习:)
【解决方案2】:

这将在网页中读取并找到&lt;html&gt;&lt;/html&gt; 的任何实例。这是您正在寻找的解决方案吗?

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>']

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

【讨论】:

  • 可能:) HTML 不是我的领域,但需要学习处理可能包含所有内容的文本。我实际上需要两个正则表达式:一个用于 URL,一个用于标签。我刚从这里的标签开始。但是,在您的示例中,您使用的是 html 而不是 http 或 https(两者都需要)。我又错过了什么吗?:)
  • 如果您需要帮助生成正则表达式来为您的文本创建匹配项,这个网站非常好:regexr.com
  • 我会试试的。谢谢
  • 它只打印 ['', '']。有什么遗漏吗?
  • 期望的输出是什么?
猜你喜欢
  • 2017-02-01
  • 1970-01-01
  • 2014-03-25
  • 2011-11-16
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多