Поиск всех символов, кроме строки
Я пытаюсь заменить в строке все теги, кроме тега 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)