Regex 关闭所有未关闭的HTML IMG标记

Regex 关闭所有未关闭的HTML IMG标记,regex,xhtml,Regex,Xhtml,是否可以对所有未关闭的IMG标签进行正则表达式替换?如果是,我将如何确定: <img src="..." alt="..."> …作为一个潜在的替代品 = <img src="..." alt="..."/> = 更新:我们有数百页,数千个图像标签,所有这些都必须关闭。我没有拘泥于正则表达式——除了手动更新所有IMG标记之外,任何其他方法都足够了。在HTML中,的结束标记“必须忽略”,因此开始标记关闭元素,不能有未关闭的IMG 如果您想将HTML转换为

是否可以对所有未关闭的IMG标签进行正则表达式替换?如果是,我将如何确定:

  <img src="..." alt="...">

…作为一个潜在的替代品

   = <img src="..." alt="..."/>
=

更新:我们有数百页,数千个图像标签,所有这些都必须关闭。我没有拘泥于正则表达式——除了手动更新所有IMG标记之外,任何其他方法都足够了。

在HTML中,
的结束标记“必须忽略”,因此开始标记关闭元素,不能有未关闭的IMG


如果您想将HTML转换为XHTML,那么请使用真正的解析器。正则表达式不是这个工作的好工具。

你说的“未关闭”到底是什么意思


我从未尝试过,但封闭的img标记是以
开头的标记,
'',
'',
"b";;
foreach(@images){
如果(/
匹配:
匹配:b“/>
这将匹配,例如

“>
然后离开

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" />


单独使用。

更换所有未关闭的IMG标签:

(<img[^>]+)(?<!/)>
content=“text”
content=re.sub('(',r'\1/>',content,count=0)
打印(内容)

lookbehind很酷,尽管

这个问题的确很好+1!看起来他在使用HTML,必须切换到XHTML,不是吗?如果属性值没有被引用(有效!),或者被单引号引用(有效!),或者属性名称包含非字母数字字符(HTML5的数据foo),它就会中断或者如果属性名称包含大写字符。大写很容易处理。我认为不允许使用简单引号,但事实并非如此。同样,易于替换:替换为“['”]但是对于非alpha字符,你是对的。同样,我认为这是可以做到的,但是规范必须更精确。尽管如此,自动完成这项任务是可能的,但是(可能)不只是使用regexp。regexp只是一个非常好的第一个过滤器。如果他的页面上的url方案始终相同,我可能就足够了。无论如何,谢谢你的评论。将
替换为
[”]
将导致它在
foo=“bar'baz”bar中中断“
.HTML不容易用regex解析。这是否假设
img
元素占用一行文本?但是,它确实假设alt和title文本不包含
(不能保证包含数百页代码).你说得对。这就是为什么正则表达式不是处理HTML的最佳工具的原因之一,正如bobince的传奇文章所述。当然,你可以解释这一点(将编辑我的文章)。
@David Dorward:我对SGML不是很确定,但在XML中是一个简单的
@Odelya-当我说“使用真正的解析器”时我指的是HTML解析器,而不是XML解析器。因为HTML不是XML,这似乎很明显。
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" />
(<img[^>]+)(?<!/)>
(<img("[^"]*"|[^>])+)(?<!/)>
<img src="image.gif" alt="hey, look--->">
<img src="image/image.gif">
<img src="image/image.gif" />
content = "text<img src='img.jpg'>text<img src='img.png' >text"
content = re.sub('(<img.*?)>', r'\1/>', content, count=0)
print(content)