আমি কিভাবে একটি স্ট্রিং থেকে সাদা স্থান ট্রিম করব?


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, collection_of_s)
ওয়ার্ড

1
কেবল প্রান্তে শ্বেত স্পেসগুলি ছাঁটাই করার কোনও উপায় আছে কি?
নিখিল গিররাজ

2
@ কিলথ্রুশ রেফারেন্সের জন্য ধন্যবাদ, তবে আমি মনে করি আপনি rstrip()ফাংশনটি বোঝাতে চেয়েছিলেন । :-)
নিখিল গিররাজ

14
মাঝে মাঝে আমার মনে পাইথন ইচ্ছাপূর্বক ভালভাবে গ্রহণ করেন এবং অর্থপূর্ণ নাম এড়াতে মতো ভাষায় বেশীরভাগ অনুক্রমে ব্যবহার করুন "অনন্য" এবং "ভিন্ন" হতে - stripপরিবর্তে trim, isinstanceপরিবর্তে instanceof, listপরিবর্তে array, ইত্যাদি, ইত্যাদি কেন শুধু শুধু ব্যবহার সবার সাথে পরিচিত নাম গুলো ?? গীজ: পি
গেরশম

3
@ জারশোমস stripএর ক্ষেত্রে আমি সম্পূর্ণরূপে একমত, তবে একটি তালিকা অ্যারের থেকে সম্পূর্ণ আলাদা।
জেএফএ

262

উপরের উত্তরে নির্দেশিত হিসাবে

myString.strip()

leading n, tra r,। t, \ f, স্পেসের মতো সমস্ত নেতৃস্থানীয় এবং অনুসরণকারী শ্বেতস্পেসের অক্ষর সরিয়ে ফেলবে।

আরও নমনীয়তার জন্য নিম্নলিখিত ব্যবহার করুন

  • কেবল শীর্ষস্থানীয় হোয়াইটস্পেসের চরগুলি সরিয়ে দেয়:myString.lstrip()
  • কেবল পেছনের শ্বেতস্থান চরগুলি সরিয়ে দেয়:myString.rstrip()
  • মুছে ফেলা নির্দিষ্ট হোয়াইটস্পেস অক্ষর: myString.strip('\n')বা myString.lstrip('\n\r')বা myString.rstrip('\n\t')ইত্যাদি।

আরও বিবরণ ডক্সে উপলব্ধ


আমি বিশ্বাস করি \ r \ n নয় \ n \ r ... (পোস্টটি সম্পাদনা করতে পারে না - পর্যাপ্ত
অক্ষরগুলি

8
@ স্টেফ্যাননিচ: চরিত্রগুলির ক্রমটি মোটেই গুরুত্বপূর্ণ নয়। \ n \ r এছাড়াও remove 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
Arklur

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

পাইথনের স্ট্রিং থেকে আমি কীভাবে নেতৃস্থানীয় এবং অনুসরণকারী শ্বেত স্পেস সরিয়ে ফেলব?

সুতরাং নীচের সমাধানটি অগ্রণী এবং পেছনের সাদা স্থান পাশাপাশি মধ্যবর্তী সাদা স্থানগুলিকেও সরিয়ে ফেলবে। আপনার যদি একাধিক শ্বেতস্পেস ছাড়াই একটি পরিষ্কার স্ট্রিং মানগুলি পাওয়া দরকার Like

>>> 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()এটি সন্ধান করা হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.