【发布时间】:2012-05-05 02:06:46
【问题描述】:
我有文本(Python 2.6 的代码):
txt="foo<br><br><b>bar :</b><br>foo<br><b>bar :</b>"
然后我尝试提取任意标签(本例中为标签)的内容:
r=re.compile("<%s.*?>(.+?)</%s>" % ("b","b"), re.I|re.S)
这主要是可行的,但输出不是我对我的棘手文本的预期:
>>>re.findall(r,txt)
['<br><b>bar :', 'foo<br><b>bar :']
在任何情况下都可以编写一个正则表达式来从任何 HTML 标记中提取文本吗?
【问题讨论】:
-
为此目的使用 html 解析器,例如 Beautiful Soup 或 lxml。
-
您的要求不够明确。我推断如果嵌套将是非法的,并且假设结束标记会修复它,我推断你想假设一个结束 b 标记?这远远超出了正则表达式的合理使用。您需要一个健壮的 HTML 标签解析器。幸运的是,其中有很多。
-
@KurzedMetal:使用 BeautifulSoup 而不是 lxml 的任何具体原因。
-
@RanRag:有什么理由编辑评论吗?我只是给了 OP 我想到的第一个选项。
-
@RanRag anything 比正则表达式更好地解析 html。 :P 我实际上发现 lxml 对使用 xpath 和 beautifulsoup 进行解析以遍历网页很有用。