【问题标题】:Python: Need to extract tag content from html page using regex, but not BeautifulSoupPython:需要使用正则表达式从html页面中提取标签内容,而不是BeautifulSoup
【发布时间】:2011-08-14 10:38:42
【问题描述】:

我有一个要求,我必须提取 <raw> 标签内的内容。例如我需要从这个html sn-p中提取abcdefgh
<html><body><raw somestuff>abcd</raw><raw somesuff>efgh</raw></body></html>

我在我的 python 中使用了这段代码
re.match(r'.*raw.*(.*)/raw.*', DATA)

但这并没有返回任何子字符串。我不擅长正则表达式。因此,对此进行更正或新的解决方案将对我有很大帮助。 我不应该使用外部库(由于我公司的一些限制)。

【问题讨论】:

  • 不确定这个问题被问的频率如何?
  • “我不应该使用外部库(由于我公司的一些限制)”这是一个非常非常糟糕的主意。您的公司正在浪费时间和金钱,让您尝试重新发明现有的、有效的、正确的、广泛使用的解决方案。
  • 或者公司是学校,作业是作业;)

标签: python html regex tags substring


【解决方案1】:

贵公司确实需要重新考虑他们的政策。重写 XML 解析器完全是浪费时间,Python 已经有好几个了。有些包含在标准库中,所以如果你可以import re,你也应该被允许import xml.etree.ElementTreehttp://docs.python.org/library/markup.html 中列出的任何其他内容。

你真的应该使用其中之一。重复所有这些工作是没有意义的。

【讨论】:

    【解决方案2】:

    使用非贪婪匹配 (*?) 可以轻松做到这一点,至少对于您的示例而言。

    re.findall(r'<raw[^>]*?>(.*?)</raw>', DATA)

    【讨论】:

    • 遗憾的是,它一般不会起作用。但它似乎会工作一段时间。
    • 这不是一个很有帮助的评论@S.Lott,你到底指的是什么?
    • @Rob Young:像 XML 或 HTML 这样的语言的正则表达式可能会被同类型的深度嵌套标签打败。因此,<raw><raw></raw></raw> 结构将击败任何 RE。
    • @S.Lott 我认为我在这句话中很可爱,但我想我应该更明确地指出“至少对于你的例子”。
    • 不是每个人都受到正则表达式的限制。正如您从尝试使用 RE 解析 HTML 或 XML 的人们提出的 Stack Overflow 问题的数量中看到的那样。
    猜你喜欢
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多