Python 请求一个健壮的正则表达式,该正则表达式检查img标记是否包含HTML文档中的alt元素

Python 请求一个健壮的正则表达式,该正则表达式检查img标记是否包含HTML文档中的alt元素,python,html,regex,validation,logging,Python,Html,Regex,Validation,Logging,我正在编写一个python脚本来检查HTML文档IMG标记。 它应该检查alt=”“是否存在于IMG标签内。 然后它会打印出行号 正则表达式必须考虑内容的不同顺序。例如: <img class="" alt="" src=""> <img class="" src=""> <img src="" class=""> <img src=""> 所以,是的,去夏天。 regex检查img标记的所有元素是否存在 它必须考虑一系列可能的安排 谢谢您使

我正在编写一个python脚本来检查HTML文档IMG标记。 它应该检查alt=”“是否存在于IMG标签内。 然后它会打印出行号

正则表达式必须考虑内容的不同顺序。例如:

<img class="" alt="" src="">
<img class="" src="">
<img src="" class="">
<img src="">

所以,是的,去夏天。 regex检查img标记的所有元素是否存在 它必须考虑一系列可能的安排


谢谢您

使用正则表达式评估HTML有点冒险,但是如果您愿意接受缺点*,您可以使用以下方法来实现这一点:


*当然,这个正则表达式完全不知道它匹配的标记是否在注释中,被注释打断,格式不正确,被
标记或任何其他可能改变其对实际HTML解析器含义的情况包围。

您首先将您的问题陈述为仅关于alt元素,然后说您想“检查img标记的所有元素是否存在,它必须考虑一系列可能的安排”。不清楚你在问什么。可能的重复是为了它的价值:所有注意到的缺点都只能强化一个事实,即regex不适合parsin。要解决所有这些问题,lxml、beautifulsoup甚至pyxml才是真正的解决方案。+1但是Tim——如果您要花更多的精力对正则表达式进行完整的注释(这应该对所有非平凡的正则表达式进行注释,比如这个正则表达式),为什么不首先以自由间距模式编写正则表达式呢?这对你来说工作更少,同时你将树立一个最佳实践的好榜样。(JavaScrict除外)
regex = re.compile(r'<img (?=[^>]*\balt=")(?=[^>]*\bsrc=")(?=[^>]*\bclass=")')
<img    # Match '<img'
(?=     # Assert that it's possible to match the following from this position:
 [^>]*  #  Any number of characters except >
 \b     #  A word boundary (here: start of a word)
 alt="  #  The literal text 'alt="'
)       # End of lookahead
(?=[^>]*\bsrc=")   # Do the same for `src`, from the same position as before
(?=[^>]*\bclass=") # Do the same for `class`, from the same position as before