python - 从 <b></b> 标签中提取文本

标签 python html regex tags

我有文本(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,因为正则表达式只能捕获正则表达式语言。 HTML 语言包含任意嵌套,正则表达式无法处理这些嵌套。

也就是说,您可以提取典型 html 的开始和结束标记之间的文本,如果您只对正则表达式代码做一个小改动:

r=re.compile("<%s.*?>(.+?)</%s>" % ("b","b"), re.I|re.S) 


>>> r=re.compile("<%s>(.+?)</%s>" % ("b","b"), re.I|re.S)
>>> txt="foo<br><br><b>bar :</b><br>foo<br><b>bar :</b>"
>>> re.findall(r, txt)
['bar :', 'bar :']

.*?允许
匹配您的开始标签。

但是,此策略仅将匹配您的模式的第一个标签与匹配您的模式的第一个 结束标签相匹配,而不是实际与开始标签配对的标签。当嵌套相同的标签时,它不会执行您可能期望的操作,如下例所示:

>>> txt="foo<b><b><b>bar :</b></b></b><br>foo<br><b>bar :</b>"
>>> re.findall(r, txt)
['<b><b>bar :', 'bar :']
>>> 

关于python - 从 <b></b> 标签中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10297882/

相关文章:

python - (python) 文档字符串导致缩进错误

python - 使用 ConfigParser 创建一个包含文件中指定的所有元素的类

html - 背景大小:更改浏览器大小时包含太多空格

jquery - 检查选择元素是否具有特定类并将该类添加到不同的 div

键上 dict 正则表达式的 Python dict

python PIL : IOError: cannot identify image file

javascript - 以编程方式更改图像特征

jquery:查找包含给定字符串的元素的索引

c# - 正则表达式字符串定义问题

java - 从富文本中提取base64字符串并将其收集在数组中