Как изменить содержимое тега?

<p id="1">

Пытаюсь регулярными выражениями заменить содержимое тега p.

Написал регулярное выражение:

text = re.sub(r'<p id="\d{1,}">', '???', i)

Не могу понять, как на выходе получить вот такое:

<p class="test" id="1">

Ответы (2 шт):

Автор решения: Jack_oS

Cогласен с Wiktor Stribiżew: попробуйте Beautiful Soup:

from bs4 import BeautifulSoup


html = '''<p id="1">'''
soup = BeautifulSoup(html, 'html.parser')

soup.find('p')['class'] = 'test'

в итоге в soup будет:

>>> soup
<p class="test" id="1"></p>

сделайте его строкой, если нужно...

→ Ссылка
Автор решения: Qwertiy

Чтобы сохранить id, надо поместить его в захватываемую группу и подставить её значение. Фиксированный текст можно было бы просто скопипастить, но я предпочитаю поместить в захватываемую группу и его, чтобы в случае дальнейших изменений не приходилось синхронизировать два места. https://ideone.com/gS3Y40

import re

s = '<p id="1">'
print(re.sub(r'(<p)\s+(id="\d+">)', r'\1 class="test" \2', s))

Другой вариант - использовать предпросмотр вперёд: https://ideone.com/LLl4A2

import re

s = '<p id="1">'
print(re.sub(r'<p(?=\s+id="\d+">)', r'<p class="test"', s))
→ Ссылка