我正在处理像这样的单个HTML字符串
>> s = 'u><br/>\n Some text <br/><br/><u'
我在破碎的HTML或不完整的HTML标记中嵌入了有意义的文本。我只需要提取内部文本,并忽略损坏的HTML。我怎样才能做到这一点?我正在使用
>> re.search(r'(.>)(<.>)(.>)', s)
>>
但这会返回null。
答案 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.'