2010-08-03 10 views
11

से प्रारूपण निकालें मैं एक स्ट्रिंग है लिंक, बोल्ड पाठ, आदिअजगर का उपयोग कर, HTML टैग/एक स्ट्रिंग

मैं सभी टैग पट्टी तो मैं बस कच्चे पाठ है चाहता हूँ की तरह html मार्कअप शामिल है।

ऐसा करने का सबसे अच्छा तरीका क्या है? regex?

उत्तर

28

आप regex का उपयोग करने जा रहे हैं:

import re 
def striphtml(data): 
    p = re.compile(r'<.*?>') 
    return p.sub('', data) 

>>> striphtml('<a href="foo.com" class="bar">I Want This <b>text!</b></a>') 
'I Want This text!' 
+1

यह केवल मज़बूती पर अच्छी तरह से गठित एचटीएमएल काम करेंगे (यानी, कोई नहीं छोड़ा जाएगा '' <' or '> वास्तविक टैग के बाहर, जैसे कोई विकृत टैग '

+0

कृपया बहुत सीमित स्थितियों के रूप में अधिक स्पष्टीकरण जोड़ें जहां यह एक अच्छा विचार होगा और मैं अपना डाउन-वोट हटा दूंगा। धन्यवाद। – Trufa

+4

प्लस यह सुंदर पाठ के लिए निम्न पाठ => "अगर 3 < 5 then 5 > 3" – Shaokan

-1

पर '>' या पाठ हो जाएगा कि क्या निर्भर करता है '<' मैं या तो केवल समारोह उन लोगों के बीच कुछ भी हटा सकते हैं या एक पार्स उपयोग करने के लिए होगा lib

def cleanStrings(self, inStr): 
    a = inStr.find('<') 
    b = inStr.find('>') 
    if a < 0 and b < 0: 
    return inStr 
    return cleanString(inStr[a:b-a]) 
10

AFAIK regex का उपयोग करके HTML पार्स करने के लिए एक बुरा विचार है, तो आप beautiful soup की तरह एक HTML/XML पार्सर का उपयोग कर बेहतर होगा।

+5

+1 को हटा देगा – derekerdmann

+0

मैं सुंदरसप का उपयोग कर रहा हूं, लेकिन मैं मैन्युअल रूप से HTML टैग को भी पट्टी करने में सक्षम होना चाहता हूं। धन्यवाद! – Blankman

+1

@ ब्लैंकमैन यह उल्लेख करना एक अच्छा विचार होगा कि आपके प्रश्न में – volting

3

SGMLParser का उपयोग करें। regex सरल मामले में काम करता है। लेकिन एचटीएमएल के साथ बहुत सी जटिलता है जिसके बजाय आपको निपटना नहीं है।

>>> from sgmllib import SGMLParser 
>>> 
>>> class TextExtracter(SGMLParser): 
...  def __init__(self): 
...   self.text = [] 
...   SGMLParser.__init__(self) 
...  def handle_data(self, data): 
...   self.text.append(data) 
...  def getvalue(self): 
...   return ''.join(ex.text) 
... 
>>> ex = TextExtracter() 
>>> ex.feed('<html>hello &gt; world</html>') 
>>> ex.getvalue() 
'hello > world' 
+0

धन्यवाद, ऐसे समाधान के लिए थोड़ी देर लग रही है जिसके लिए बाहरी निर्भरता की आवश्यकता नहीं है। बदलना * ''। (Ex.text) * * * 'में शामिल हों। (Self.text) में शामिल हों * इसे स्टैंड-अलोन क्लास के रूप में भी उपयुक्त बना दिया। – hasienda

8

lxml.html का उपयोग करें। यह सुंदर सूप से बहुत तेज है और कच्चा पाठ एक ही कमांड है।

>>> import lxml.html 
>>> page = lxml.html.document_fromstring('<!DOCTYPE html>...</html>') 
>>> page.cssselect('body')[0].text_content() 
'...' 
+2

ग्रेट समाधान, धन्यवाद! HTML टुकड़ों से पाठ निकालने के लिए इस स्निपेट का उपयोग करें: 'lxml.html.fromstring ('कुछ HTML खंड')। Text_content()' – Adam

+1

यह स्वीकार्य उत्तर होना चाहिए। एचटीएमएल (विशेष रूप से सीधे इंटरनेट के) के लिए रेगेक्स का उपयोग करना एक बहुत ही ** खराब ** विचार है! –

संबंधित मुद्दे