tag.text की सीमा गहराई

वोट
0

मैं सिर्फ यह सही नहीं मिल सकता है। BeautifulSoup4 इतना भ्रमित कर रहा है।

मैं HTML पाठ में unrendered Markdown संदर्भ ठीक करने के लिए कोशिश कर रहा हूँ। regex है:

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

जाहिरा तौर पर BS4 का उपयोग करता है के बाद से matchनियमित अभिव्यक्ति के साथ, मैं साथ regex व्यापक बनाया

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

लक्ष्य इस तरह के तार खोजने के लिए और उन्हें वास्तविक साथ बदलने के लिए है <a>लिंक, लेकिन नहीं अगर वे एक में हैं <code>टैग (जो कुछ भी गहराई)। मैं से URL प्राप्त करने के लिए एक मानचित्रण है identifier

[<code>title<code>][identifier]मिलान किया जाना चाहिए, लेकिन <code>[title][identifier]</code>नहीं करना चाहिए।

यदि इनपुट है:

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

उत्पादन किया जाना चाहिए:

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

हालांकि निम्न इनपुट अछूता रहना चाहिए:

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

मैं निम्नलिखित की कोशिश की:

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

... लेकिन यह टैग याद आ रही थी। मैं इस पोस्ट में एक स्पष्टीकरण मिल गया: BeautifulSoup - एक टैग के अंदर पाठ के आधार पर खोज । ऐसा लगता है text(या नया नाम stringहै, हालांकि मैं व्यवहार भिन्न हो पाया) वापस आ जाएगी Noneजब वहाँ टैग में अन्य टैग कर रहे हैं, जिसका अर्थ है टैग <p>[<code>title<code>][identifier]</p>मिलान नहीं किया जा जाएगा।

मैं यह भी सोचा पद समाधान दिया:

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

... लेकिन अब मुझे देने के बजाय, पत्तियों के करीब टैग किए जाने पर ऐसा लगता है कि जड़ टैग रिटर्न <html>और <body>, क्योंकि tag.textरिटर्न भरा, सभी सन्तान की पुनरावर्ती पाठ । तो निश्चित रूप से इन टैग regex मिलान पाठ है, लेकिन होता है अंदर <code>टैग

सबसे अच्छा समाधान, मुझे लगता है, जिसे टैग का पाठ एक निश्चित गहराई तक ही सीमित के खिलाफ regex कोशिश करने के लिए किया जाएगा। की गहराई -1 पाठ तो <p>[<code>title</code>][identifier]</p>है [ ][identifier]ही टैग की गहराई -2 पाठ है [<code>title</code>][identifier], तो गहराई -2 सब मैं की जरूरत है।

क्या ऐसा करने के लिए कोई रास्ता है? या फिर आप के मन में किसी अन्य समाधान है? मैंने सोचा था कि शायद मैं जड़, चौड़ाई-पहले के पत्तों से सभी टैग पर पुनरावृति सकता है, लेकिन मैं अभी भी साथ एक ही समस्या है tag.textऔर साथ ही सभी सन्तान 'पाठ लौटने।

19/03/2020 को 22:00
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            

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