I need to parse HTML code and find all occurrences of <img>
tags within an <a>
tag to replace something in the <a>
tag.
Let's say, I want to find
<a ...><img src="path/to/image" /></a>
The <a>
tag can contain different attributes and what I need to replace is:
<a
by <a class="something"
The parsing is done in Python but I think, I will need the use of regular expressions.
However, I am pretty new to regular expressions so I am wondering how I can do this.
答案 0 :(得分:0)
假设HTML并不棘手(当<script>
s中似乎有标记时,它会使事情变得复杂),这很容易。
您可以使用此正则表达式从<a...>
获取属性列表:
<a([^>]+)><img[^>]+></a>
(如果您发现事物之间可能存在空格,则可以使用<a([^>]+)>\s*<img[^>]+>\s*</a>
。)
如果你只是需要添加一件事,这真的很容易。您可以使用:
re.sub(r'<a([^>]+)><img([^>]+)></a>',
r'<a' + ' class="something" ' + r'\1><img\2></a>',
string)
在上面的示例中,我使用第二个捕获组来获取img
的内容。
答案 1 :(得分:0)
你应该真正使用HTML parsing engine,因为有许多模糊的边缘情况,正则表达式无法轻松容纳。但我不会告诉你如何过你的生活。
这个正则表达式将:
"<a "
匹配,因此可以将其替换为<a class=somevalue
(<a\b\s*)(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\s?\/?>\s*<img\b\s*(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\s?\/?>\s*<\/a>)
示例文字
注意onmouseover属性中的困难边缘情况。
<a onmouseover=' href="NotTheDroidYoureLookingFor" ; funRotator("<img href="not_the_droid_you_are_looking_for.png>") ; ' href="http://NotTheDroid.html">No droids here.
</a>
<a onmouseover=' href="Jedi_Mind_Trick.html" ; funRotator("<img href="not_the_droid_you_are_looking_for.png>") ; ' href="http://FoundTheDroid.html/"><img src="path/to/image/Desired_Droid.png" />
</a>
<强>的Python 强>
在python中,您可以将示例文本分配给名为original_string
的变量,并发出以下行。请注意,单引号已加倍,因为整个正则表达式字符串都包含在单引号中。
new_string = re.sub(r'(<a\b\s*)(?=(?:[^>=]|=''[^'']*''|="[^"]*"|=[^''"][^\s>]*)*?\s?\/?>\s*<img\b\s*(?:[^>=]|=''[^'']*''|="[^"]*"|=[^'"][^\s>]*)*?\s?\/?>\s*<\/a>)', r'<a class=FoundDroids ', original_string)
<强>结果
搜索并替换后:
<a onmouseover=' href="NotTheDroidYoureLookingFor" ; funRotator("<img href="not_the_droid_you_are_looking_for.png>") ; ' href="http://NotTheDroid.html">No droids here.
</a>
<a class=FoundDroids onmouseover=' href="Jedi_Mind_Trick.html" ; funRotator("<img href="not_the_droid_you_are_looking_for.png>") ; ' href="http://FoundTheDroid.html/"><img src="path/to/image/Desired_Droid.png" />
</a>