Python正则表达式 - 从内部HTML中剥离HTML标记和格式化字符

时间:2016-12-09 16:09:03

标签: python

我正在处理像这样的单个HTML字符串

>> s = 'u><br/>\n                                    Some text <br/><br/><u'

我在破碎的HTML或不完整的HTML标记中嵌入了有意义的文本。我只需要提取内部文本,并忽略损坏的HTML。我怎样才能做到这一点?我正在使用

>> re.search(r'(.>)(<.>)(.>)', s)
>>

但这会返回null。

1 个答案:

答案 0 :(得分:1)

如果我理解你是对的,那么你就是想要接受这个输入:

u><br/>\n                                    Some text <br/><br/><u

并收到此输出:

\n                                    Some text 

只需关心两个向内指向的括号之间的内容,就可以做到这一点。我们想要:

  • 右括号>(我们知道从哪里开始)
  • 某些文字\n Some text(内容)不包含左括号
  • 左括号<(我们知道在哪里结束)

你想:

>>> s = 'u><br/>\n                                    Some text <br/><br/><u'
>>> re.search(r'>([^<]+)<', s)
<_sre.SRE_Match object; span=(6, 55), match='>\n                                    Some text >

(可以通过.group(1)访问捕获的组。)

此外,如果您希望每行有多个匹配项,则可能需要使用re.findall

>>> re.findall(r'>([^<]+)<', s)
['\n                                    Some text ']

编辑:解决评论:如果你有多个匹配,并且想要将它们连接成一个字符串(有效删除所有类似HTML的标记内容),请执行以下操作:

>>> s = 'nbsp;<br><br>Some text.<br>Some \n more text.<br'
>>> ' '.join(re.findall(r'>([^<]+)<', s))
'Some text. Some \n more text.'