Python正则表达式求助:修复未闭合的XML img标签
解决Python正则匹配未闭合img标签问题
嘿,我来帮你搞定这个正则问题!你现在的需求是精准匹配那些没有以/>结尾的img标签,然后把它们改成闭合形式对吧?
首先,你之前用的'(img.*?)>'会匹配所有img标签,不管有没有闭合,所以我们需要加个限制条件——排除掉那些>前面已经有/的标签。
正确的正则模式和替换方法
我们可以用负向回顾后发断言来实现这个需求,具体的正则表达式和替换逻辑如下:
import re # 示例文本(包含未闭合和已闭合的img标签) source_text = '<a href="a_url" class="url" target="_blank"> <img ng-src=" {{getImageUrl(\'homeHelp64.jpg\')}}", alt="?" width="16" height="16"> Home </a> <img src="valid.jpg"/>' # 匹配未闭合img标签的正则 pattern = r'(<img[^>]*?)(?<!/)>' # 替换:在>前添加/ fixed_text = re.sub(pattern, r'\1/>', source_text) print(fixed_text)
正则模式详解
(<img[^>]*?):这是一个捕获组,负责匹配<img开头,一直到结尾>之前的所有内容。[^>]*?`是非贪婪匹配的任意非>字符,确保不会错误匹配到其他标签的>。(?<!/):这是负向回顾后发断言,用来检查当前位置(也就是即将匹配>的前一个字符)不是/,这样就完美排除了已经是<img .../>`的闭合标签。>:匹配未闭合标签的结尾符号。
替换逻辑
替换字符串r'\1/>'里的\1会引用我们刚才捕获到的<img到>之前的内容,然后我们在后面加上/>,就把原来的<img ...>改成了<img .../>`。
这样处理后,只有未闭合的img标签会被修改,已经正确闭合的标签会完全保留,不会被误改。
内容的提问来源于stack exchange,提问作者user1749707
相关产品推荐
相关产品推荐

