2010-11-24 15 views
6

में व्हाइटस्पेस को कैसे हटाएं मेरे पास HTML का एक गुच्छा है, मैं सुंदर सूप के साथ पार्सिंग कर रहा हूं और यह एक मामूली स्नैग को छोड़कर बहुत अच्छी तरह से जा रहा है।सुंदर सूप

<li><span class="plaincharacterwrap break"> 
        Zazzafooky but one two three! 
       </span></li> 
<li><span class="plaincharacterwrap break"> 
        Zazzafooky2 
       </span></li> 
<li><span class="plaincharacterwrap break"> 
        Zazzafooky3 
       </span></li> 

आदर्श रूप में मैं चाहूँगा

<li><span class="plaincharacterwrap break">Zazzafooky but one two three!</span></li><li><span class="plaincharacterwrap break">Zazzafooky2</span></li> 

वहाँ अनावश्यक खाली स्थान के का एक बहुत है कि मैं करेंगे: मैं अपने वर्तमान आउटपुट के रूप में निम्नलिखित के साथ, एक भी लाइन स्ट्रिंग में उत्पादन सहेजना चाहते इससे छुटकारा पाने के लिए, लेकिन strip() का उपयोग करके यह आवश्यक रूप से हटाने योग्य नहीं है, और न ही मैं सभी रिक्त स्थान को हटा सकता हूं क्योंकि मुझे टेक्स्ट को बनाए रखने की आवश्यकता है। मैं यह कैसे कर सकता हूं? यह एक आम पर्याप्त समस्या की तरह प्रतीत होता है कि रेगेक्स अधिक हो जाएगा, लेकिन क्या यह एकमात्र तरीका है?

मेरे पास कोई <pre> टैग नहीं है, इसलिए मैं वहां थोड़ा और बलवान हो सकता हूं।

धन्यवाद एक बार फिर!

+0

आप अपने उत्पादन कैसे प्रिंट कर रहे हैं? – user225312

+0

आप जो भी कर सकते हैं वह कर सकते हैं: सभी आसन्न व्हाइटस्पेस (टेक्स्ट में) को एकल रिक्त स्थान में संकुचित करें। – delnan

उत्तर

9

यहाँ कैसे आप इसे नियमित अभिव्यक्ति के बिना क्या कर सकते हैं:

>>> html = """ <li><span class="plaincharacterwrap break"> 
...      Zazzafooky but one two three! 
...     </span></li> 
... <li><span class="plaincharacterwrap break"> 
...      Zazzafooky2 
...     </span></li> 
... <li><span class="plaincharacterwrap break"> 
...      Zazzafooky3 
...     </span></li> 
... """ 
>>> html = "".join(line.strip() for line in html.split("\n")) 
>>> html 
'<li><span class="plaincharacterwrap break">Zazzafooky but one two three!</span></li><li><span class="plaincharacterwrap break">Zazzafooky2</span></li><li><span class="plaincharacterwrap break">Zazzafooky3</span></li>' 
0
re.sub(r'[\ \n]{2,}', '', yourstring) 

Regex [\ \n]{2} से मेल खाता है नई-पंक्तियों और रिक्त स्थान (भाग निकले किया जाना हो) जब दो से अधिक या उनमें से अधिक नहीं है।

re.sub('\ {2,}', '', yourstring) 
re.sub('\n*', '', yourstring) 

मैं पहली बार ही कई नई-पंक्तियों की जगह लेंगे लगता होगा, लेकिन ऐसा लगता है (कम से कम मेरे लिए) ठीक काम करने के लिए: अधिक गहन कार्यान्वयन यह है।

6

पुराना सवाल है, मुझे पता है, लेकिन beautifulsoup4 इस सहायक stripped_strings कहा जाता है।

इस प्रयास करें:

description_el = about.find('p', { "class": "description" }) 
descriptions = list(description_el.stripped_strings) 
description = "\n\n".join(descriptions) if descriptions else "" 
संबंधित मुद्दे