Limit mélysége tag.text

szavazat
0

Csak nem tudom, hogy ez jobb. BeautifulSoup4 annyira zavaró.

Próbálom kijavítani olvasztott Markdown hivatkozások HTML szöveget. A regex van:

REF = re.compile(r\[(?P<title>.+?)\]\[(?P<identifier>.*?)\])

Mivel nyilvánvalóan BS4 felhasználása matcha reguláris kifejezések, tettem a regex szélesebb,

REF = re.compile(r.*\[(?P<title>.+?)\]\[(?P<identifier>.*?)\].*, re.DOTALL)

A cél az, hogy megtalálják a húrok, és helyettük a tényleges <a>kapcsolatok, de nem, ha azok egy <code>tag (bármilyen mélység). Van egy leképezés, hogy az URL identifier.

[<code>title<code>][identifier]kell illeszteni, de <code>[title][identifier]</code>nem kell.

Ha az input:

<p>[<code>title<code>][identifier]</p>

Az eredmény a következőképpen:

<p><a id=identifier href=http://example.com><code>title<code></a></p>

Azonban a következő bemeneti maradjon érintetlen:

<p><code>[title][identifier]</code></p>

Próbáltam a következő:

tags = [tag.parent for tag in soup.find_all(text=REF) if not tag.find_parent(code)]

... de ez hiányzott címkéket. Találtam egy magyarázat ebben a posztban BeautifulSoup - szöveges kereséshez belsejében egy címke . Úgy tűnik, text(vagy az új név string, de találtam a viselkedését, hogy más) vissza fog térni None, ha vannak más címkéket a tag, vagyis a címke <p>[<code>title<code>][identifier]</p>nem lesz kiegyenlített.

Arra is gondoltam, a poszt adta a megoldást:

tags = list(
    soup.find_all(
        lambda tag: tag.name != code and
                    not tag.find_parent(code) and
                    REF.search(tag.text)
    )
)

... de most ahelyett, hogy nekem címkéket, közel a levelek, visszatér gyökér címkéket, mint <html>és <body>, mert tag.textvisszatér a teljes, rekurzív szövegét valamennyi leszármazottját . Aztán persze ezeket a címkéket tartalmaz szöveget összevetjük regex, de belül <code>címkéket .

A legjobb megoldás, azt hiszem, az lenne, hogy próbálja meg a regex ellen a címke szövege csak egy bizonyos mélységig. Ha mélység 1 szövege <p>[<code>title</code>][identifier]</p>van [ ][identifier]és mélység 2 szövegét ugyanaz a címke [<code>title</code>][identifier], akkor mélység 2 van szükségem.

Van egy módja annak, hogy? Vagy van más megoldás a fejében? Arra gondoltam, talán lehetett végighaladni az összes tag a levelek, hogy a gyökér, szélességi, de én még mindig ugyanaz a probléma tag.textvisszatért minden a leszármazottai szöveget is.

A kérdést 19/03/2020 22:00
a forrás felhasználó
Más nyelveken...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more