मैं एक स्ट्रिंग से व्हॉट्सएप कैसे ट्रिम कर सकता हूं?


1155

मैं पायथन में एक स्ट्रिंग से प्रमुख और अनुगामी व्हाट्सएप कैसे निकालूं?

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

" Hello " --> "Hello"
" Hello"  --> "Hello"
"Hello "  --> "Hello"
"Bob has a cat" --> "Bob has a cat"

17
यह सवाल सिर्फ मुझे 3 मिनट के लिए स्ट्रिपिंग के बारे में काम के सहयोगियों के साथ बोलना था। किसी और के माध्यम से आधे रास्ते से जुड़ने के बाद उन्होंने सोचा होगा कि हम सभी एक रात काम करने वाले थे।
वाइटेकैट

जवाबों:


1734

सिर्फ एक स्थान, या सभी लगातार रिक्त स्थान? यदि दूसरा, तो तार पहले से ही एक .strip()विधि है:

>>> ' Hello '.strip()
'Hello'
>>> ' Hello'.strip()
'Hello'
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> '   Hello   '.strip()  # ALL consecutive spaces at both ends removed
'Hello'

यदि आपको केवल एक स्थान को हटाने की आवश्यकता है, तो आप इसे कर सकते हैं:

def strip_one_space(s):
    if s.endswith(" "): s = s[:-1]
    if s.startswith(" "): s = s[1:]
    return s

>>> strip_one_space("   Hello ")
'  Hello'

इसके अलावा, ध्यान दें कि str.strip()अन्य व्हाट्सएप वर्णों को भी हटा देता है (जैसे टैब और नईलाइन)। केवल स्थान निकालने के लिए, आप तर्क को हटाने के लिए वर्ण को निर्दिष्ट कर सकते हैं strip, अर्थात:

>>> "  Hello\n".strip(" ")
'Hello\n'

19
यदि आपको स्ट्रिप फ़ंक्शन की आवश्यकता है, उदाहरण के लिए एक मैप फ़ंक्शन, तो आप इसे str.strip () के माध्यम से एक्सेस कर सकते हैं, जैसे कि मैप (str.strip, collection_of_s)
वार्ड

1
क्या सिर्फ़ व्हाट्सएप को सिरों पर ट्रिम करने का एक तरीका है?
निखिल गिर्राज

2
@killthrush संदर्भ के लिए धन्यवाद, लेकिन मुझे लगता है कि आप rstrip()फ़ंक्शन का मतलब है । :-)
निखिल गिर्राज

14
कभी-कभी मुझे लगता है कि अजगर जानबूझकर अच्छी तरह से स्वीकार कर लिया और सार्थक नाम से बचा जाता है की तरह है कि भाषाओं के विशाल बहुमत के क्रम में उपयोग "अद्वितीय" और "अलग" होने के लिए - stripके बजाय trim, isinstanceके बजाय instanceof, listके बजाय array, आदि, आदि क्यों न सिर्फ उपयोग नामों से हर कोई परिचित है ?? गीज़: पी
गेरशोम

3
@GershomMaes के stripमामले में, मैं पूरी तरह से सहमत हूं, लेकिन एक सूची एक सरणी से पूरी तरह से अलग है।
JFA

262

जैसा कि ऊपर दिए गए जवाबों में बताया गया है

myString.strip()

\ n, \ r, \ t, \ f, space जैसे सभी प्रमुख और अनुगामी व्हाट्सएप वर्णों को हटा देगा।

अधिक लचीलेपन के लिए निम्नलिखित का उपयोग करें

  • केवल प्रमुख व्हाट्सएप चार्ट हटाता है :myString.lstrip()
  • केवल अनुगामी व्हॉट्सएप चार्ट निकालता है :myString.rstrip()
  • विशिष्ट व्हाट्सएप चार्ट को हटाता है : myString.strip('\n')या myString.lstrip('\n\r')या myString.rstrip('\n\t')तो।

अधिक विवरण डॉक्स में उपलब्ध हैं


मेरा मानना ​​है कि \ r \ n नहीं \ n \ r है ... (पोस्ट को संपादित नहीं कर सकते - पर्याप्त वर्ण संशोधित नहीं)
StefanNch

8
@StefanNch: पात्रों का क्रम कोई मायने नहीं रखता। \ n \ r भी \ r \ n को हटा देगा।
जोहान्स ओवरमैन

122

strip व्हॉट्सएप के पात्रों तक सीमित नहीं है:

# remove all leading/trailing commas, periods and hyphens
title = title.strip(',.-')

54

यह सभी प्रमुख और अनुगामी व्हाट्सएप को हटा देगा myString:

myString.strip()

3
इस पोस्ट में केवल कोड है, यह स्पष्ट नहीं करता है कि फ़ंक्शन क्या करता है। क्या यह व्हाट्सएप के प्रमुख या अनुगामी या दोनों को हटा देता है? क्या यह सिर्फ रिक्त स्थान या हर तरह के व्हाट्सएप को हटाता है? क्या आप इसे हटा सकते हैं बस रिक्त स्थान तो, या वहाँ एक और कार्य करने के लिए है? यदि यह अग्रणी और अनुगामी दोनों व्हाट्सएप को हटा देता है, तो क्या आप इसे दोनों में से एक को हटा सकते हैं, या नौकरी करने के लिए (ए) अन्य फ़ंक्शन (एस) हैं? myString.strip()मेरे द्वारा पूछे गए प्रश्नों में से कोई भी उत्तर नहीं।
EKons

8
निष्पक्ष होने के लिए, ओपी ने विशेष रूप से एक विधि मांगी जो एक स्ट्रिंग से अग्रणी और अनुगामी व्हाट्सएप को हटाती है। मेरे लिए बहुत अच्छा जवाब
डेनिस लिन्स

21

आप पट्टी चाहते हैं ():

myphrases = [ " Hello ", " Hello", "Hello ", "Bob has a cat" ]

for phrase in myphrases:
    print phrase.strip()

0

मैं एक स्ट्रिंग में बहुत सारे रिक्त स्थान को हटाना चाहता था (स्ट्रिंग के बीच में, न केवल शुरुआत या अंत में)। मैंने इसे बनाया है, क्योंकि मुझे नहीं पता कि यह कैसे करना है:

string = "Name : David         Account: 1234             Another thing: something  " 

ready = False
while ready == False:
    pos = string.find("  ")
    if pos != -1:
       string = string.replace("  "," ")
    else:
       ready = True
print(string)

यह एक स्थान पर दोहरे स्थान की जगह लेता है जब तक कि आपके पास कोई भी दोहरा स्थान न हो


हालांकि यह काम करता है, यह बहुत कुशल नहीं है, इसके बजाय इसका उपयोग करें: stackoverflow.com/a/2077906/1240286
आर्कलुर

0

मुझे इस बात का हल नहीं मिला कि मैं क्या देख रहा था इसलिए मैंने कुछ कस्टम फ़ंक्शन बनाए। आप उन्हें आज़मा सकते हैं।

def cleansed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    # return trimmed(s.replace('"', '').replace("'", ""))
    return trimmed(s)


def trimmed(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    ss = trim_start_and_end(s).replace('  ', ' ')
    while '  ' in ss:
        ss = ss.replace('  ', ' ')
    return ss


def trim_start_and_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    return trim_start(trim_end(s))


def trim_start(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in s:
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(chars).lower()


def trim_end(s: str):
    """:param s: String to be cleansed"""
    assert s is not (None or "")
    chars = []
    for c in reversed(s):
        if c is not ' ' or len(chars) > 0:
            chars.append(c)
    return "".join(reversed(chars)).lower()


s1 = '  b Beer '
s2 = 'Beer  b    '
s3 = '      Beer  b    '
s4 = '  bread butter    Beer  b    '

cdd = trim_start(s1)
cddd = trim_end(s2)
clean1 = cleansed(s3)
clean2 = cleansed(s4)

print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s1, len(s1), cdd, len(cdd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s2, len(s2), cddd, len(cddd)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s3, len(s3), clean1, len(clean1)))
print("\nStr: {0} Len: {1} Cleansed: {2} Len: {3}".format(s4, len(s4), clean2, len(clean2)))

0

यदि आप बाईं और दाईं ओर से रिक्त स्थान की संख्या को ट्रिम करना चाहते हैं , तो आप ऐसा कर सकते हैं:

def remove_outer_spaces(text, num_of_leading, num_of_trailing):
    text = list(text)
    for i in range(num_of_leading):
        if text[i] == " ":
            text[i] = ""
        else:
            break

    for i in range(1, num_of_trailing+1):
        if text[-i] == " ":
            text[-i] = ""
        else:
            break
    return ''.join(text)

txt1 = "   MY name is     "
print(remove_outer_spaces(txt1, 1, 1))  # result is: "  MY name is    "
print(remove_outer_spaces(txt1, 2, 3))  # result is: " MY name is  "
print(remove_outer_spaces(txt1, 6, 8))  # result is: "MY name is"

0

यह एक नियमित अभिव्यक्ति के साथ भी किया जा सकता है

import re

input  = " Hello "
output = re.sub(r'^\s+|\s+$', '', input)
# output = 'Hello'

0

मैं पायथन में एक स्ट्रिंग से प्रमुख और अनुगामी व्हाट्सएप कैसे निकालूं?

तो नीचे दिए गए समाधान प्रमुख और अनुगामी व्हाट्सएपों के साथ-साथ मध्यवर्ती व्हाट्सएपों को भी हटा देंगे। जैसे अगर आपको कई व्हाट्सएप के बिना एक स्पष्ट स्ट्रिंग मान प्राप्त करने की आवश्यकता है।

>>> str_1 = '     Hello World'
>>> print(' '.join(str_1.split()))
Hello World
>>>
>>>
>>> str_2 = '     Hello      World'
>>> print(' '.join(str_2.split()))
Hello World
>>>
>>>
>>> str_3 = 'Hello World     '
>>> print(' '.join(str_3.split()))
Hello World
>>>
>>>
>>> str_4 = 'Hello      World     '
>>> print(' '.join(str_4.split()))
Hello World
>>>
>>>
>>> str_5 = '     Hello World     '
>>> print(' '.join(str_5.split()))
Hello World
>>>
>>>
>>> str_6 = '     Hello      World     '
>>> print(' '.join(str_6.split()))
Hello World
>>>
>>>
>>> str_7 = 'Hello World'
>>> print(' '.join(str_7.split()))
Hello World

जैसा कि आप देख सकते हैं कि यह स्ट्रिंग में सभी व्हाट्सएप को हटा देगा (आउटपुट Hello Worldसभी के लिए है)। स्थान मायने नहीं रखता। लेकिन अगर आपको वास्तव में व्हाट्सएप के प्रमुख और अनुगामी बनाने की आवश्यकता है, तो strip()वह मिल जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.