से प्रारूपण निकालें मैं एक स्ट्रिंग है लिंक, बोल्ड पाठ, आदिअजगर का उपयोग कर, HTML टैग/एक स्ट्रिंग
मैं सभी टैग पट्टी तो मैं बस कच्चे पाठ है चाहता हूँ की तरह html मार्कअप शामिल है।
ऐसा करने का सबसे अच्छा तरीका क्या है? regex?
से प्रारूपण निकालें मैं एक स्ट्रिंग है लिंक, बोल्ड पाठ, आदिअजगर का उपयोग कर, HTML टैग/एक स्ट्रिंग
मैं सभी टैग पट्टी तो मैं बस कच्चे पाठ है चाहता हूँ की तरह html मार्कअप शामिल है।
ऐसा करने का सबसे अच्छा तरीका क्या है? regex?
आप 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!'
पर '>' या पाठ हो जाएगा कि क्या निर्भर करता है '<' मैं या तो केवल समारोह उन लोगों के बीच कुछ भी हटा सकते हैं या एक पार्स उपयोग करने के लिए होगा 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])
AFAIK regex का उपयोग करके HTML पार्स करने के लिए एक बुरा विचार है, तो आप beautiful soup की तरह एक HTML/XML पार्सर का उपयोग कर बेहतर होगा।
+1 को हटा देगा – derekerdmann
मैं सुंदरसप का उपयोग कर रहा हूं, लेकिन मैं मैन्युअल रूप से HTML टैग को भी पट्टी करने में सक्षम होना चाहता हूं। धन्यवाद! – Blankman
@ ब्लैंकमैन यह उल्लेख करना एक अच्छा विचार होगा कि आपके प्रश्न में – volting
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 > world</html>')
>>> ex.getvalue()
'hello > world'
धन्यवाद, ऐसे समाधान के लिए थोड़ी देर लग रही है जिसके लिए बाहरी निर्भरता की आवश्यकता नहीं है। बदलना * ''। (Ex.text) * * * 'में शामिल हों। (Self.text) में शामिल हों * इसे स्टैंड-अलोन क्लास के रूप में भी उपयुक्त बना दिया। – hasienda
lxml.html का उपयोग करें। यह सुंदर सूप से बहुत तेज है और कच्चा पाठ एक ही कमांड है।
>>> import lxml.html
>>> page = lxml.html.document_fromstring('<!DOCTYPE html>...</html>')
>>> page.cssselect('body')[0].text_content()
'...'
ग्रेट समाधान, धन्यवाद! HTML टुकड़ों से पाठ निकालने के लिए इस स्निपेट का उपयोग करें: 'lxml.html.fromstring ('कुछ HTML खंड')। Text_content()' – Adam
यह स्वीकार्य उत्तर होना चाहिए। एचटीएमएल (विशेष रूप से सीधे इंटरनेट के) के लिए रेगेक्स का उपयोग करना एक बहुत ही ** खराब ** विचार है! –
यह केवल मज़बूती पर अच्छी तरह से गठित एचटीएमएल काम करेंगे (यानी, कोई नहीं छोड़ा जाएगा '' <' or '> वास्तविक टैग के बाहर, जैसे कोई विकृत टैग '
कृपया बहुत सीमित स्थितियों के रूप में अधिक स्पष्टीकरण जोड़ें जहां यह एक अच्छा विचार होगा और मैं अपना डाउन-वोट हटा दूंगा। धन्यवाद। – Trufa
प्लस यह सुंदर पाठ के लिए निम्न पाठ => "अगर 3 < 5 then 5 > 3" – Shaokan