/ / पायथन रेगेक्स उन सभी टैग को हटाने के लिए जो दो अन्य टैग - अजगर, एचटीएमएल, रेगेक्स के बीच नहीं हैं

पाइथन regex उन सभी टैग को हटाने के लिए जो दो अन्य टैग के बीच नहीं हैं - पायथन, एचटीएमएल, regex

मैं अजगर का उपयोग कर रहा हूं और एक स्ट्रिंग से सभी HTML टैग को हटाना चाहता हूं जो "कुछ टैग में संलग्न नहीं हैं। इस उदाहरण में, मैं उन सभी HTML टैग को हटाना चाहता हूं जो" t संलग्न नहीं हैं। <header>टैग</header> और उस संलग्न टैग को भी नहीं हटाएं।

उदाहरण के लिए:

<h1>Morning</h1>
<header>
<h1>Afternoon</h1>
<h2>Evening</h2>
</header>
<h2>Night</h2>

परिणाम:

Morning
<header>
<h1>Afternoon</h1>
<h2>Evening</h2>
</header>
Night

मैंने इस पर घंटों बिताए लेकिन कोई भाग्य नहीं। मुझे पता है कि निम्नलिखित सभी टैग मिलेंगे:

re.sub("<.*?>", "", mystring)

और यह हेडर टैग के भीतर कुछ भी मिलेगा:

re.sub("<header>.*?</header>", "", mystring)

लेकिन मैं इसे कैसे नकार सकता हूं, ताकि पहला रेगेक्स नजरअंदाज करे कि दूसरा रेग्क्स क्या पाता है? कोई भी मदद बहुत ही सराहनीय होगी! धन्यवाद! :)

उत्तर:

जवाब के लिए 3 № 1

आप इसे जल्दी और आसानी से उपयोग कर सकते हैं BeautifulSoup, जैसा कि टिप्पणियों में जोसेफ वाल्स ने उल्लेख किया है। ऐसे:

from bs4 import BeautifulSoup

soup = BeautifulSoup("""<h1>Morning</h1>
<header>
<h1>Afternoon</h1>
<h2>Evening</h2>
</header>
<h2>Night</h2>""", "html.parser")

for tag in soup.find_all(recursive=False):
if not tag.findChildren():
tag.unwrap()

print(soup)

यह प्रिंट करता है:

Morning
<header>
<h1>Afternoon</h1>
<h2>Evening</h2>
</header>
Night