Как в строке с помощью регулярных выражений убрать все html теги и вывести оставшийся текст?
В строке необходимо убрать все html теги и вывести оставшийся текст. Между символами должны быть пробелы. Исходная строка:
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Timer ⏲</title><link rel="icon" href="./img/goes.png"><link rel="stylesheet" href="./css/normalize.css"><link rel="stylesheet" href="./css/style.css"></head><body><div class="time_wrapper"><h1 class="bold minutes">1:00:00</h1><img class="time" src="./img/start_end.png"></div><div class="buttons"><button class="buttons_button regular start" onclick="start()">Start</button><button class="buttons_button regular notshow pause" onclick="pause()">Pause</button></div></body>
Мой код:
import re
s=input()
pat = r'<[()"=a-z_ ]*>([001: ⏲<a-zA-Z]*)<[/]\w*>'
p = re.findall(pat,s)
for i in p:
for j in i:
if j==" ":
print(j,sep="",end="")
else:
print(j,sep=" ",end=" ")
print(" ",sep="",end="")
Не находит 1:00:00 и после перед значком лишний пробел T i m e r ⏲ S t a r t P a u s e
Как исправить регулярное выражение?
Ответы (2 шт):
Автор решения: Алексей Р
→ Ссылка
import re
s = '<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Timer ⏲</title><link rel="icon" href="./img/goes.png"><link rel="stylesheet" href="./css/normalize.css"><link rel="stylesheet" href="./css/style.css"></head><body><div class="time_wrapper"><h1 class="bold minutes">1:00:00</h1><img class="time" src="./img/start_end.png"></div><div class="buttons"><button class="buttons_button regular start" onclick="start()">Start</button><button class="buttons_button regular notshow pause" onclick="pause()">Pause</button></div></body>'
pat = r'(?<=>)[^<>]+?(?=<)'
print(*re.findall(pat, s))
Timer ⏲ 1:00:00 Start Pause
Автор решения: Виктор
→ Ссылка
Самое простое сделать так:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
print(soup.get_text())
А если не пользоваться сторонними библиотеками
from html.parser import HTMLParser
class HTMLFilter(HTMLParser):
text = ""
def handle_data(self, data):
self.text += data
f = HTMLFilter()
f.feed(data)
print(f.text)