Поиск всех символов, кроме строки

Я пытаюсь заменить в строке все теги, кроме тега tg-spoiler и закрывающего его. как это сделать?

я знаю, что в питоне возможно найти все символы кроме перечисленных с помощью квадратных скобок, но как сделать такое же, но с целой строкой? пример строки:

<a href="tg://user?id="><strong>kkk</strong></a> <tg-spoiler><strong>rrrrr</strong></tg-spoiler> <a href="tg://user?id="><strong>tttt</strong></a>

ожидаемый вывод:

kkk <tg-spoiler>rrrrr</tg-spoiler> tttt

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

Автор решения: Aleksey Vaganov

Используйте Negative Lookahead выражение:

<(?!/?tg-spoiler)[^>]+>

И ваш код на python будет таким:

import re

s = '<a href="tg://user?id="><strong>kkk</strong></a> <tg-spoiler><strong>rrrrr</strong></tg-spoiler> <a href="tg://user?id="><strong>tttt</strong></a>'

print(re.sub('<(?!/?tg-spoiler)[^>]+>', '', s))

Песочница

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

Определенно не претендует на лучше решение, но оно работает, скорее всего можно было это решить с помощью регулярных выражений, но я просто распарсил строку по символам < и >

s = '<a href="tg://user?id="><strong>kkk</strong></a> <tg-spoiler><strong>rrrrr</strong></tg-spoiler> <a href="tg://user?id="><strong>tttt</strong></a>'

i = 0
lst = []
l = ""
start = False
while i < len(s):
  if s[i] == "<":
    l = str()
    start = True
  elif s[i] == ">":
    l += ">"
    lst.append(l)
    start = False
  if start:
    l+=s[i]
  i+=1

r1 = "<tg-spoiler>"
r2 = "</tg-spoiler>"
lst.remove(r1)
lst.remove(r2)

for tag in lst: s = s.replace(tag, "")

print(s)
  
→ Ссылка