Quiero reemplazar todas las etiquetas div con el nombre de clase "figura"

<div class="figure">
    <p>Some content.</p>
</div>

Con una etiqueta que no es HTML (en mi caso, es un código corto de Hugo)

{{% row %}}
    <p>Some content.</p>
{{% /row %}}

Es fácil reemplazar etiquetas html con otras etiquetas html, pero no tengo idea de cómo hacerlo. si hay etiquetas que no son HTML involucradas.

1
Sr. Schneider 27 ago. 2020 a las 13:31

2 respuestas

La mejor respuesta

No veo una solución "fácil", porque los códigos cortos pueden contener caracteres /, <, > también, por lo que no puede tenerlos como parte del árbol del documento.

Una solución es reemplazar <div class="figure"> con una etiqueta personalizada y, al final, reemplazar estas etiquetas personalizadas con sus códigos cortos:

from bs4 import BeautifulSoup

txt = '''
<div>
    <div class="figure">
        <p>Some content.</p>
    </div>
</div>

<div class="figure">
    <p>Some other content.</p>
</div>
'''

soup = BeautifulSoup(txt, 'html.parser')

for div in soup.select('div.figure'):
    t = soup.new_tag('xxx-row')
    t.contents = div.contents
    div.replace_with(t)

s = str(soup).replace('<xxx-row>', '{{% row %}}')
s = s.replace('</xxx-row>', '{{% /row %}}')

print(s)

Huellas:

<div>
{{% row %}}
<p>Some content.</p>
{{% /row %}}
</div>
{{% row %}}
<p>Some other content.</p>
{{% /row %}}
1
Andrej Kesely 27 ago. 2020 a las 11:31

Si usa el Bloc de notas o cualquier otro editor de texto que tenga search and replace

Funciones que puedes simplemente reemplazar

'<div class="figure">' con '{{% row %}}' y '</div>' con '{{% /row %}}'.

0
Merrick919 27 ago. 2020 a las 11:29
63614107