-4

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

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

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

所以,是的,夏天。正则表达式检查 img 标签的所有元素是否存在,它必须考虑一系列可能的安排

谢谢

4

1 回答 1

2

使用正则表达式来评估 HTML 有点冒险,但如果你愿意接受缺点*,你可以使用积极的前瞻断言来让它工作:

regex = re.compile(r'<img (?=[^>]*\balt=")(?=[^>]*\bsrc=")(?=[^>]*\bclass=")')

如果当前字符串包含<img(在同一标记内)后跟alt=",src="class=", 的任何顺序,则将匹配。

解释:

<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

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

于 2013-08-28T15:10:53.820 回答