Как выбрать класс внутри тега класса в python с помощью регулярного выражения - PullRequest
0 голосов
/ 14 марта 2020

Я использую Python re библиотеку. Здесь нет Beautifulsoup4.

У меня есть:

<div class="col-xs-12">100/25</div>

Я хочу:

<div class="column-md">100/25</div>

Что мне нужно, так это выбрать col-xs-12 ТОЛЬКО если внутри <div class=""> и заменить его.

Пока у меня есть:

text.replace("<class>(.|\n)col-xs-12<\/class>, "column-md")

Но это не работает.

1 Ответ

1 голос
/ 14 марта 2020

Попробуйте использовать 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, не рекомендуется. Но иногда мы вынуждены манипулировать таким контентом с помощью текстового редактора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...