是否可以对所有未关闭的IMG标签进行正则表达式替换?如果是这样,我将如何识别:
<img src="..." alt="...">
...作为可能的候选人被取代?
= <img src="..." alt="..."/>
更新:我们有数百个页面和数千个图像标签,所有这些都必须关闭。我不拘泥于RegEx -除了手动更新所有IMG标签之外,任何其他方法都足够。
(<img[^>]+)(?<!/)>
将匹配未正确关闭的img
标签。它要求您使用的正则表达式支持后向支持(Ruby和JavaScript不支持,而大多数其他支持)。反向编号1将包含匹配项,因此,如果您搜索此正则表达式并替换为\1/>
,则应该不错。
如果需要考虑属性内>
的可能性,则可以使用
(<img("[^"]*"|[^>])+)(?<!/)>
例如,这将匹配
<img src="image.gif" alt="hey, look--->">
<img src="image/image.gif">
然后离开
<img src="image/image.gif" />
单独。
在HTML中<img>
的结束标签“必须省略”,因此开始标签将关闭元素,并且您不能拥有未关闭的img。
如果要将HTML转换为XHTML,请使用真实的解析器。正则表达式不是这项工作的很好工具。
替换所有未关闭的IMG标签:
content = "text<img src='img.jpg'>text<img src='img.png' >text"
content = re.sub('(<img.*?)>', r'\1/>', content, count=0)
print(content)
虽然后面看起来很酷
您所说的“未封闭”到底是什么意思?
<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
您可以try聪明地找到这样的嫌疑人,但我们永远不能保证自己是万无一失的。
我从未尝试过,但是封闭的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" />