python - 正则表达式如何将带有内容的多余 html 标签替换为一个标签
问题描述
我正在尝试在 Python 中创建一个删除 html 标签重复项的正则表达式。
我尝试对组进行此操作,但失败了:
正则表达式:
<strong>(.*)<\/strong><strong>(.*)<\/strong>
Python代码:
description = re.sub(r"<strong>(.*)<\/strong><strong>(.*)<\/strong>", r"<strong>\1\2</strong>", description, flags=re.IGNORECASE)
这里有一些例子:
IN: text1 <strong>text2 </strong><strong>text3 </strong><strong>text4,</strong> text5
OUT: text1 <strong>text2 text3 text4,</strong> text5
IN: text1 <strong>text2 </strong> HELLO <strong>text3 </strong><strong>text4,</strong> text5
OUT: text1 <strong>text2 </strong> HELLO <strong>text3 text4,</strong> text5
IN: <strong> hello <strong>world</strong></strong>
OUT: <strong> hello world</strong>
解决方案
您好,欢迎来到 StackOverflow!
您可以从另一个角度看待您的问题:您可以保留第一个开始标签和最后一个结束标签,而不是捕获标签的内容。可以通过以下方式删除中间的关闭和打开标签:
import re
mytext = 'text1 <strong>text2 </strong> HELLO <strong>text3 </strong><strong>text4,</strong> text5'
re.subs('<\/strong>\s*<strong>', '', mytext)
这将导致:
text1 <strong>text2 </strong> HELLO <strong>text3 text4,</strong> text5
请注意,\s*
需要考虑标签之间的任何空格或换行符。
您还可以使用反向引用修改正则表达式以推广到所有 HTML5 标记:
merge_duplicated = re.compile(r'<\/(\w+)>\s*<\1>')
推荐阅读
- python-3.x - 使用 python3.8 未将数据插入到 mysql db
- ios - 归档发布时,通过桥接头暴露的 Objective-c 类在 swift 中不可见
- python - 读取并附加到同一个文本文件
- windows - 在 Windows 批处理文件中按换行符拆分
- javascript - 将事件侦听器添加到变量 onClick 函数并使其 onPlay?
- yaml - 如何在 Swagger UI 中隐藏服务器描述?
- nginx - 关闭 RTMP 输入时结束 FFMPEG 执行
- git - 将主分支的更改添加到本地分支
- javascript - 选择排序返回未定义
- python - 使用python列出更高分辨率的图像