একটি স্ট্রিং মধ্যে সমস্ত সাদা স্থান সরান


787

আমি উভয় প্রান্তে এবং শব্দের মধ্যে একটি স্ট্রিং থেকে সমস্ত শ্বেতস্পেসকে মুছে ফেলতে চাই।

আমার এই পাইথন কোডটি রয়েছে:

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

তবে এটি কেবল স্ট্রিংয়ের উভয় পক্ষের সাদা স্থানকে সরিয়ে দেয়। আমি কীভাবে সমস্ত সাদা স্থান সরিয়ে ফেলব?


4
আপনার ফলাফলটি দেখতে কেমন হওয়া উচিত? hello apple? helloapple?
মার্ক বাইয়ার্স

4
@ জোয়াচিমপাইলবার্গ, আমি ঠিক মনে করি না, কারণ এটি শব্দের মধ্যে সাদা অংশ কমিয়ে দেওয়ার বিষয়েও।
ওয়াল-ও-ম্যাট

3
হ্যালোপ্পলটি আমার আউটপুট হওয়া দরকার
co2f2e

8
ভুল হলে আমাকে সংশোধন করুন, তবে "স্পেসস্পেস" "স্থানের অক্ষর" এর সমার্থক নয়। বর্তমান হিসাবে সঠিক হিসাবে চিহ্নিত উত্তর সমস্ত সাদা স্থান সরিয়ে দেয় না । তবে, যেহেতু এটিকে সঠিক হিসাবে চিহ্নিত করা হয়েছে এটি অবশ্যই উদ্দিষ্ট প্রশ্নের উত্তর দিয়েছে? সুতরাং আমাদের গ্রহণ করা উত্তর প্রতিফলিত করতে প্রশ্ন সম্পাদনা করা উচিত? @ কালানামিথ কি করেছেন বা করেছেন, আপনি সমস্ত সাদা স্থান বা কেবল স্থানগুলি সরাতে চান?
আনানফায়

উত্তর:


1658

আপনি যদি শীর্ষস্থানীয় এবং শেষের স্থানগুলি সরাতে চান তবে ব্যবহার করুন str.strip():

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

আপনি যদি সমস্ত স্থানের অক্ষর মুছে ফেলতে চান তবে ব্যবহার করুন str.replace():

(এনবি এটি কেবলমাত্র "স্বাভাবিক" এএসসিআইআই স্পেস ক্যারেক্টারটি সরিয়ে দেয় ' ' U+0020তবে অন্য কোনও সাদা জায়গা নয় )

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

আপনি যদি নকল স্থানগুলি সরাতে চান তবে ব্যবহার করুন str.split():

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

42
এই ফাংশনটির মাহাত্ম্য হ'ল এটি বিউটিফুল স্যুপ থেকে প্রাপ্ত এইচটিএমএল ফাইল থেকে '\ r \ n' সরিয়ে দেয়।
lsheng

27
আমি "" .জাইন (বাক্য.স্প্লিট ()) পছন্দ করি, এটি বাক্যটির যে কোনও স্থান থেকে সমস্ত সাদা স্থান (স্পেস, ট্যাব, নিউলাইন) সরিয়ে দেয়।
ডন

ভিক্ষুক এখানে কেউ আমাকে ব্যাখ্যা করতে পারেন কেন 'হ্যালো হ্যালো আপেল অ্যাপল'-এর মুদ্রণ (বাক্য.জয়াইন (বাক্য.স্প্লিট ()) ফলাফল? কোডটি এখানে কীভাবে প্রসেস করা হয় তা কেবল বুঝতে চাই।
ইয়ান্নিস দ্রান

2
@ ইয়ানিসড্রান স্ট্রিং জোন () ডকুমেন্টেশন চেক করুন , যখন আপনি কল করেন sentence.join(str_list)আপনি পাইথনকে sentenceবিভাজক হিসাবে স্ট্রিং-লিস্ট থেকে আইটেমগুলিতে যোগ দিতে বলেন ।
ক্যাড্রিক জুলিয়েন

1
"".join(sentence.split())প্রকৃতপক্ষে আধ্যাত্মিক সমাধান, কেবল স্থানগুলির চেয়ে দক্ষতার সাথে সমস্ত সাদা স্থান সরিয়ে ফেলতে হবেমার্ক Byers ' চমৎকার উত্তর সম্ভবত এই কম প্রযোজ্য উত্তর পরিবর্তে গৃহীত হয়েছে করা উচিত নয়।
সিসিল কারি

263

কেবল স্থানগুলি সরাতে ব্যবহার করুন str.replace:

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

মুছে ফেলার জন্য সব হোয়াইটস্পেস অক্ষর (স্থান, ট্যাব, NEWLINE, ইত্যাদি) আপনি ব্যবহার করতে পারেন splitতারপর join:

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

বা একটি নিয়মিত প্রকাশ:

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

আপনি যদি কেবল গোড়া থেকে শুরু থেকে শেষ করতে চান এবং শেষ করতে চান তবে আপনি ব্যবহার করতে পারেন strip:

sentence = sentence.strip()

আপনি lstripকেবল স্ট্রিংয়ের শুরু থেকে সাদা স্থান অপসারণ করতে এবং স্ট্রিংয়ের rstripশেষ থেকে সাদা অংশটি সরাতেও ব্যবহার করতে পারেন ।


দ্রষ্টব্য: আপনার ধাপটি সংকলন করার দরকার নেই, পুনরায় সাবু (এবং বন্ধুরা) সংকলিত প্যাটার্নটি ক্যাশে করুন। আরও দেখুন, এমিল এর উত্তর
অ্যান্ডি হেডেন

পাইথন 3:yourstr.translate(str.maketrans('', '', ' \n\t\r'))
ডিড02392

104

একটি বিকল্প হ'ল নিয়মিত এক্সপ্রেশন ব্যবহার করা এবং এই আশ্চর্যজনক সাদা-স্পেস অক্ষরগুলিও মেলাতে । এখানে কিছু উদাহরন:

শব্দের মধ্যেও একটি স্ট্রিংয়ের সমস্ত স্থান সরিয়ে ফেলুন:

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(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 উভয় ক্ষেত্রেই কাজ করে)


"20 u202a1234 \ u202c" এর জন্য কাজ করেনি। একই আউটপুট দেয়: u '20 u202a1234 \ u202c'
সারং

@ সারং: এগুলি শ্বেতক্ষেত্রের অক্ষর নয় (এটি গুগল করুন এবং আপনি দেখতে পাবেন) তবে "সাধারণ বিরামচিহ্ন"। আমার উত্তরটি কেবল সাদা স্থান হিসাবে শ্রেণিবদ্ধ অক্ষরগুলি অপসারণ নিয়ে কাজ করে।
এমিল স্টেনস্ট্রোম

আমি এখানে দেখি এটিই একমাত্র সমাধান যা এইসব জঘন্য ইউনিকোড সাদা বর্ণের অক্ষরগুলি সরিয়ে দেয়, ধন্যবাদ
ফ্যাম

41

হোয়াইটস্পেসে স্থান, ট্যাব এবং সিআরএলএফ অন্তর্ভুক্ত রয়েছে । সুতরাং আমরা ব্যবহার করতে পারি একটি মার্জিত এবং ওয়ান-লাইনার স্ট্রিং ফাংশন str.translate:

পাইথন ঘ

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

বা যদি আপনি পুরোপুরি হতে চান:

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

পাইথন 2

' 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)আমার জন্য উত্পাদন করে । ডক্স বলছে যে আর্গুমেন্টটি একটি অনুবাদ টেবিল, স্ট্রিং.মকেট্রান্স () দেখুন। তবে নীচে আমনন হেরেলের মন্তব্য দেখুন।
ব্যবহারকারী 405

2
' hello apple'.translate(str.maketrans('', '', string.whitespace))দ্রষ্টব্য: আপনি যদি একাধিকবার এটি করতে চান তবে ট্রান্স-টেবিলটি সঞ্চয় করতে একটি পরিবর্তনশীল তৈরি করা ভাল।
শোগান আভার্সা-ড্রুজন

17

শুরু এবং শেষ থেকে সাদা স্থান অপসারণ করার জন্য, ব্যবহার করুন strip

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

প্রশ্নটি কেবল প্রান্তে নয়, সমস্ত সাদা জায়গা সরিয়ে দেওয়ার জন্য বিশেষভাবে জিজ্ঞাসা করে। দয়া করে নোটিশ নিন।
শায়ান শফিক

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

মেক ইতিমধ্যে উপরে "অনুবাদ" পদ্ধতিটি নির্দেশ করেছেন। এবং এই প্রকরণটি পাইথন 3 এর সাথে কাজ করে ( এই প্রশ্নোত্তর দেখুন )।


2
ধন্যবাদ! বা, xxx.translate( { ord(c) :None for c in string.whitespace } )পুরোপুরি জন্য।
ব্যবহারকারী 405

7

সাবধান হও:

strip একটি স্ট্রিপ এবং লিস্ট্রিপ করে (নেতৃস্থানীয় এবং পিছনে স্থানগুলি, ট্যাবগুলি, রিটার্নগুলি এবং ফর্ম ফিডগুলি সরিয়ে দেয়, তবে এটি স্ট্রিংয়ের মাঝখানে তাদের সরিয়ে দেয় না)।

আপনি যদি কেবল শূন্যস্থান এবং ট্যাবগুলি প্রতিস্থাপন করেন তবে আপনি লুকিয়ে থাকা সিআরএলএফ দিয়ে শেষ করতে পারেন যা আপনি যা সন্ধান করছেন তার সাথে মিলতে দেখা যায় তবে একই নয়।


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

3
প্রশ্নটি হ'ল সমস্ত সাদা স্থান মুছে ফেলা হয়েছে যার মধ্যে ট্যাব এবং নতুন রেখার অক্ষর রয়েছে, এই স্নিপেটটি কেবল নিয়মিত স্পেসগুলি সরিয়ে ফেলবে।
ম্যাক্সিমিলিয়ান পিটার্স

3

উপরন্তু, ফালা কিছু বৈচিত্র আছে:

একটি স্ট্রিংয়ের শুরু এবং শেষের মধ্যে ফাঁকা স্থানগুলি সরান:

sentence= sentence.strip()

একটি স্ট্রিংয়ের শুরুতে ফাঁকা স্থানগুলি সরান:

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আগে পরামর্শ দেওয়া হয়েছিল, কিন্তু আমি দেখতে পেয়েছি যে অন্যান্য শেরীকরণের মধ্যে প্রশ্নের শিরোনামের আসল উত্তরটি কিছুটা লুকানো ছিল।
হ্যান্ডেল করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.