是否可以在所有未关闭的IMG标签上进行正则表达式替换?如果是这样,我将如何识别:
<img src="..." alt="...">
......作为潜在的候选人被替换?
= <img src="..." alt="..."/>
更新:我们有数百个页面和数千个图像标签,所有这些标签都必须关闭。我不会停留在RegEx上 - 除了手动更新所有IMG标签之外,任何其他方法都足够了。
答案 0 :(得分:13)
(<img[^>]+)(?<!/)>
将匹配未正确关闭的img
代码。它要求你正在使用的正则表达式支持lookbehind(Ruby和JavaScript不会,但大多数其他人都这样做)。反向引用号1将包含匹配项,因此如果您搜索此正则表达式并替换为\1/>
,那么您应该很高兴。
如果您需要考虑>
内部属性的可能性,可以使用
(<img("[^"]*"|[^>])+)(?<!/)>
这将匹配,例如,
<img src="image.gif" alt="hey, look--->">
<img src="image/image.gif">
并离开
<img src="image/image.gif" />
单独
答案 1 :(得分:3)
在HTML中,必须省略<img>
“的结束标记”,因此start标记会关闭元素,并且您不能拥有未关闭的img。
如果您想将HTML转换为XHTML,请使用真正的解析器。正则表达式不是这项工作的好工具。
答案 2 :(得分:1)
要替换所有未关闭的IMG标签:
content = "text<img src='img.jpg'>text<img src='img.png' >text"
content = re.sub('(<img.*?)>', r'\1/>', content, count=0)
print(content)
后面看起来很酷
答案 3 :(得分:0)
“unclosed”究竟是什么意思?
<img src="a1.jpg <--no ending quotes and end parens
<img src="a1.jpg" <-- no end parens
<img src="a1.jpg"> <-- the tag does not self-close as should be done in XHTML
你可以尝试智能地找到这样的嫌疑人,但你永远不能保证是万无一失的。
答案 4 :(得分:-1)
我从未尝试过这个,但是一个封闭的img标记是一个以<img
开头的标记,其中包含内容,最后是/>
。
这是我在perl中尝试过的东西
!/usr/bin/env perl
my @images = ('<img src="toto.jpg">',
'<img src="truc/machin.jpg" title="pouet" >',
'<img src="pouet.jpg" alt="toto" />',
'<img src="math/a-greater-than-b.png" alt="a > b">');
foreach (@images) {
if (/<img\s+(([a-z]+=".*?")+\s*)>/) {
print "Match : <img $1 />\n";
}
}
产地:
Match : <img src="toto.jpg" />
Match : <img src="truc/machin.jpg" title="pouet" />
Match : <img src="math/a-greater-than-b.png" alt="a > b" />