एक स्ट्रिंग में सभी व्हाट्सएप निकालें


787

मैं एक छोर से, दोनों सिरों पर और शब्दों के बीच में सभी व्हाट्सएप को खत्म करना चाहता हूं।

मेरे पास यह पायथन कोड है:

def my_handle(self):
    sentence = ' hello  apple  '
    sentence.strip()

लेकिन यह केवल स्ट्रिंग के दोनों किनारों पर व्हाट्सएप को समाप्त करता है। मैं सभी व्हाट्सएप कैसे निकालूं?


4
आपका परिणाम कैसा दिखना चाहिए? hello apple? helloapple?
मार्क बायर्स

4
@JoachimPileborg, बिल्कुल नहीं मुझे लगता है, क्योंकि यह भी शब्दों के बीच reducung व्हाट्सएप के बारे में है।
-ओ-मैट

3
नमस्ते मेरे उत्पादन की जरूरत है
co2f2e

8
गलत होने पर मुझे सही करें, लेकिन "व्हाट्सएप" "स्पेस कैरेक्टर" का पर्याय नहीं है। सही के रूप में चिह्नित वर्तमान उत्तर सभी व्हाट्सएप को नहीं हटाता है । लेकिन, चूंकि यह सही के रूप में चिह्नित किया गया है, इसने इच्छित प्रश्न का उत्तर दिया होगा? तो हमें स्वीकृत उत्तर को दर्शाने के लिए प्रश्न को संपादित करना चाहिए? @ कालनामिथ ने किया, या आप सभी व्हाट्सएप या केवल रिक्त स्थान को हटाना चाहते हैं?
अन्नपूर्णे

जवाबों:


1658

यदि आप अग्रणी और समाप्ति स्थान हटाना चाहते हैं, तो उपयोग करें str.strip():

sentence = ' hello  apple'
sentence.strip()
>>> 'hello  apple'

यदि आप सभी अंतरिक्ष वर्णों को हटाना चाहते हैं, तो उपयोग करें str.replace():

(एनबी यह केवल "सामान्य" ASCII अंतरिक्ष चरित्र को हटाता है, ' ' U+0020लेकिन किसी अन्य व्हाट्सएप को नहीं )

sentence = ' hello  apple'
sentence.replace(" ", "")
>>> 'helloapple'

यदि आप डुप्लिकेट किए गए स्थान हटाना चाहते हैं, तो उपयोग करें str.split():

sentence = ' hello  apple'
" ".join(sentence.split())
>>> 'hello apple'

42
इस फ़ंक्शन की महानता यह है कि यह सुंदर सूप से प्राप्त html फ़ाइल से '\ r \ n' को भी हटाता है।
लेशेंग

27
मुझे "" .join (वाक्य.split ()) पसंद है, यह वाक्य में कहीं से भी सभी व्हाट्सएप (रिक्त स्थान, टैब, नईलाइन्स) को हटा देता है।
डॉन

यहाँ भीख माँगनेवाला। क्या कोई मुझे समझा सकता है कि प्रिंट (pun.join (pun.split) ()) के परिणाम 'हैलो हैलो एपलॉम्पल' क्यों हैं? बस यह समझना चाहते हैं कि कोड को कैसे संसाधित किया जाता है।
यानिस ड्रान

2
@YannisDran str.join () प्रलेखन की जांच करते हैं , जब आप कहते sentence.join(str_list)हैं कि आप अजगर को str_list से sentenceविभाजक के रूप में आइटम से जुड़ने के लिए कहते हैं ।
सेड्रिक जूलियन

1
"".join(sentence.split())वास्तव में विहित समाधान है, कुशलता से केवल रिक्त स्थान के बजाय सभी व्हाट्सएप को हटाने । मार्क बायर्स के उत्कृष्ट उत्तर को संभवतः इस कम लागू उत्तर के बदले स्वीकार किया जाना चाहिए था।
सेसिल करी

263

केवल रिक्त स्थान का उपयोग करने के लिए str.replace:

sentence = sentence.replace(' ', '')

सभी व्हाट्सएप पात्रों को हटाने के लिए (स्थान, टैब, न्यूलाइन और इसी तरह) आप splitतब उपयोग कर सकते हैं join:

sentence = ''.join(sentence.split())

या एक नियमित अभिव्यक्ति:

import re
pattern = re.compile(r'\s+')
sentence = re.sub(pattern, '', sentence)

यदि आप शुरुआत और अंत में केवल व्हाट्सएप को हटाना चाहते हैं, तो आप इसका उपयोग कर सकते हैं strip:

sentence = sentence.strip()

आप lstripकेवल स्ट्रिंग की शुरुआत से व्हाट्सएप को हटाने के लिए भी उपयोग कर सकते हैं , और स्ट्रिंग rstripके अंत से व्हाट्सएप को हटाने के लिए।


नोट: आपको संकलित पैटर्न को पुनः संकलित करने के लिए चरण (और दोस्तों) को संकलित करने की आवश्यकता नहीं है। आप भी देखिए, एमिल का जवाब
एंडी हेडन

python3:yourstr.translate(str.maketrans('', '', ' \n\t\r'))
deed02392

104

एक विकल्प नियमित अभिव्यक्तियों का उपयोग करना और इन अजीब सफेद-अंतरिक्ष पात्रों से मेल खाना भी है। यहाँ कुछ उदाहरण हैं:

शब्दों के बीच भी, एक स्ट्रिंग में सभी रिक्त स्थान निकालें:

import re
sentence = re.sub(r"\s+", "", sentence, flags=re.UNICODE)

किसी स्ट्रिंग के BEGINNING में रिक्त स्थान निकालें:

import re
sentence = re.sub(r"^\s+", "", sentence, flags=re.UNICODE)

स्ट्रिंग के अंत में रिक्त स्थान निकालें:

import re
sentence = re.sub(r"\s+$", "", sentence, flags=re.UNICODE)

रिक्त स्थान और स्ट्रिंग के अंत में दोनों रिक्त स्थान निकालें:

import re
sentence = re.sub("^\s+|\s+$", "", sentence, flags=re.UNICODE)

केवल रिक्त स्थान निकालें:

import re
sentence = " ".join(re.split("\s+", sentence, flags=re.UNICODE))

(सभी उदाहरण पायथन 2 और पायथन 3 दोनों में काम करते हैं)


"\ U202a1234 \ u202c" के लिए काम नहीं किया। एक ही आउटपुट देता है: u '\ u202a1234 \ u202c'
सारंग

@ सारंग: वे व्हाट्सएप पात्र नहीं हैं (उन्हें देखें और आप देखेंगे) लेकिन "सामान्य विराम चिह्न"। मेरा जवाब केवल व्हाट्सएप के रूप में वर्गीकृत पात्रों को हटाने से संबंधित है।
एमिल स्टेंस्ट्रम

यह एकमात्र समाधान है जो मैं यहां देख रहा हूं जो उन
लानतदार चीज़ों को

41

व्हॉट्सएप में स्पेस, टैब और CRLF शामिल हैं । एक सुरुचिपूर्ण और एक लाइनर स्ट्रिंग फ़ंक्शन जिसका हम उपयोग कर सकते हैं str.translate:

अजगर ३

' hello  apple'..translate(str.maketrans('', '', ' \n\t\r'))

या यदि आप पूरी तरह से बनना चाहते हैं:

import string
' hello  apple'..translate(str.maketrans('', '', string.whitespace))

अजगर २

' hello  apple'.translate(None, ' \n\t\r')

या यदि आप पूरी तरह से बनना चाहते हैं:

import string
' hello  apple'.translate(None, string.whitespace)

2
यह यूनिकोड व्हाट्सएप के साथ मदद नहीं करेगा जैसे\xc2\xa0
सुजाना

5
ans.translate( None, string.whitespace )केवल builtins.TypeError: translate() takes exactly one argument (2 given)मेरे लिए पैदा करता है । डॉक्स का कहना है कि तर्क एक अनुवाद तालिका है, string.maketrans () देखें। लेकिन नीचे एमन हारेल की टिप्पणी देखें।
यूजर 405

2
' hello apple'.translate(str.maketrans('', '', string.whitespace))नोट: यदि आप कई बार ऐसा करने का इरादा रखते हैं, तो ट्रांस-टेबल को स्टोर करने के लिए एक चर बनाना बेहतर है।
शोगन अवार्सा-दुरेस्ने

16

शुरुआत और अंत से व्हाट्सएप को हटाने के लिए, उपयोग करें strip

>> "  foo bar   ".strip()
"foo bar"

1
प्रश्न विशेष रूप से व्हाट्सएप के सभी को हटाने के लिए कहता है और न केवल सिरों पर। कृपया ध्यान दें।
शायन शफीक

9
' hello  \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})

MaK ने पहले ही ऊपर "ट्रांसलेट" विधि बताई। और यह भिन्नता पायथन 3 के साथ काम करती है ( इस प्रश्नोत्तर को देखें )।


2
धन्यवाद! या, xxx.translate( { ord(c) :None for c in string.whitespace } )संपूर्णता के लिए।
user405

7

सावधान रहे:

strip एक rstrip और lstrip करता है (अग्रणी और अनुगामी रिक्त स्थान, टैब, रिटर्न और प्रपत्र फ़ीड को निकालता है, लेकिन यह उन्हें स्ट्रिंग के बीच में नहीं निकालता है)।

यदि आप केवल स्थान और टैब को बदलते हैं तो आप छिपे हुए CRLF के साथ समाप्त हो सकते हैं जो कि आप जो खोज रहे हैं उससे मेल खाते हैं, लेकिन ऐसा नहीं है।


3
import re    
sentence = ' hello  apple'
re.sub(' ','',sentence) #helloworld (remove all spaces)
re.sub('  ',' ',sentence) #hello world (remove double spaces)

3
प्रश्न बहुत सारे सफेद स्थान को हटा दिया गया था जिसमें टैब और नई पंक्ति वर्ण शामिल हैं, यह स्निपेट केवल नियमित स्थान हटा देगा।
मैक्सिमिलियन पीटर्स

3

इसके अलावा, पट्टी में कुछ बदलाव हैं:

स्ट्रिंग के BEGINNING और END में रिक्त स्थान निकालें:

sentence= sentence.strip()

किसी स्ट्रिंग के BEGINNING में रिक्त स्थान निकालें:

sentence = sentence.lstrip()

स्ट्रिंग के अंत में रिक्त स्थान निकालें:

sentence= sentence.rstrip()

सभी तीन स्ट्रिंग फ़ंक्शंस strip lstrip, और स्ट्रिंग के rstripमापदंडों को पट्टी पर ले जा सकते हैं, डिफ़ॉल्ट रूप से सभी सफेद स्थान के साथ। यह तब मददगार हो सकता है जब आप किसी विशेष चीज के साथ काम कर रहे हों, उदाहरण के लिए, आप केवल रिक्त स्थान को हटा सकते हैं, लेकिन नए सिरे से नहीं:

" 1. Step 1\n".strip(" ")

या आप एक स्ट्रिंग सूची में पढ़ते समय अतिरिक्त अल्पविराम निकाल सकते हैं:

"1,2,3,".strip(",")

1

एक छोर से, दोनों सिरों पर, और शब्दों के बीच में सभी व्हाट्सएप को समाप्त करें।

>>> import re
>>> re.sub("\s+", # one or more repetition of whitespace
    '', # replace with empty string (->remove)
    ''' hello
...    apple
... ''')
'helloapple'

पायथन डॉक्स:


मुझे पता reहै कि पहले भी सुझाव दिया जा चुका है, लेकिन मैंने पाया कि प्रश्न शीर्षक का वास्तविक उत्तर अन्य सभी विकल्पों में थोड़ा छिपा हुआ था।
संभालें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.