Попробуйте использовать re.sub
с функцией обратного вызова:
def replace_div(m):
return re.sub(r'\bclass="col-xs-12"', 'class="column-md"', m.group(0))
inp = 'blah <b>stuff</b> blah <div class="col-xs-12">100/25</div> more blah'
out = re.sub(r'<div[^>]*\bclass="col-xs-12"[^>]*>.*?</div>', replace_div, inp)
print(inp)
print(out)
Это печатает:
blah <b>stuff</b> blah <div class="col-xs-12">100/25</div> more blah
blah <b>stuff</b> blah <div class="column-md">100/25</div> more blah
Стратегия заключается в том, чтобы сначала сопоставить все <div>
теги, содержащие соответствующие class
атрибут. Затем мы передаем такие соответствия в функцию обратного вызова, которая затем выполняет замену класса.
Обратите внимание, что в целом использование регулярных выражений для вложенного содержимого, такого как HTML, не рекомендуется. Но иногда мы вынуждены манипулировать таким контентом с помощью текстового редактора.