#python #html
#python #HTML
Вопрос:
Я использую Streamlit для выделения разных ключевых слов в тексте, поэтому я добавляю ключевое <span style="background-color: #XXXXXX"> keyword </span>
слово, но поскольку некоторые ключевые слова являются фразами, я заканчиваю текст с помощью a <span>
внутри a <span>
like
<span style="background-color:FFFF000"> The quick brown fox <span style..>jumps</span> over the lazy dog </span>
что приводит к ошибке при разборе Markdown или HTML в этой строке:
Я думаю определить функцию для передачи строки и удаления внутреннего диапазона в случае, если есть какой-либо
def html_debugger(text):
magic
return text
который вернет <span style="background-color:FFFF000"> The quick brown fox jumps over the lazy dog </span>
, но я не уверен, как думать об этой функции
Ответ №1:
Два способа сделать это,
Сначала со стандартной библиотекой re, она должна работать с любым типом тега, а не только span
:
import re
html = """<span style="background-color:FFFF000"> The quick brown fox <span style="test">jumps</span> over the lazy dog </span>"""
def html_debugger(text):
tag_pattern = r'<[^>]*>'
tags = re.findall(tag_pattern, text)
inside_text = re.sub(tag_pattern, '', text)
return tags[0] inside_text tags[-1]
html_debugger(html)
# '<span style="background-color:FFFF000"> The quick brown fox jumps over the lazy dog </span>'
Второй с помощью BeautifulSoup:
from bs4 import BeautifulSoup
html = """<span style="background-color:FFFF000"> The quick brown fox <span style="test">jumps</span> over the lazy dog </span>"""
def html_debugger(text):
bs_span = BeautifulSoup(text)
span = s.find_all('span')[0]
span_text = span.text
span_style = span.attrs['style']
return f'<span style="{span_style}">{span_text}</span>'
html_debugger(html)
# '<span style="background-color:FFFF000"> The quick brown fox jumps over the lazy dog </span>'
Комментарии:
1. второй очень умный, я пропустил, чтобы уточнить, что у меня обычно есть большие тексты, которые имеют несколько <span>поверх текста, но не все они находятся друг в д руге. С вашим решением, я думаю, я смогу придумать что-нибудь, чтобы решить те, которые вызывают проблем у :). Я думаю перебрать их и проверить, содержат ли они <span>внутри