Python — отлаживать HTML-тег внутри тега

#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>внутри