পাইথন একটি স্ট্রিংয়ের সর্বশেষ 3 টি অক্ষর সরান


146

আমি অজগরের একটি স্ট্রিং থেকে শেষ 3 টি অক্ষর মুছে ফেলার চেষ্টা করছি, আমি জানি না যে এই অক্ষরগুলি কী তাই আমি ব্যবহার করতে পারি না rstrip, আমার কোনও সাদা স্থান মুছে ফেলতে এবং আপার কেসে রূপান্তর করা দরকার

একটি উদাহরণ হবে:

foo = "Bs12 3ab"
foo.replace(" ", "").rstrip(foo[-3:]).upper()

এটি কাজ করে এবং আমাকে BS12 দেয় যা আমি চাই, তবে শেষ 4 র্থ এবং 3 য় অক্ষর একই থাকলে আমি উভয়ই আলগা করি যেমন foo = "BS11 1AA"আমি যদি পাই তবে'BS'

উদাহরণ fooহতে পারে:

BS1 1AB
bs11ab
BS111ab

স্ট্রিংটি 6 বা 7 অক্ষর হতে পারে এবং আমার শেষ 3 টি ফেলে দেওয়া উচিত (কোনও সাদা জায়গা না ধরে)

কোন টিপস?

উত্তর:


278

যে কোনও এবং সমস্ত সাদা স্থান সরিয়ে ফেলা হচ্ছে:

foo = ''.join(foo.split())

শেষ তিনটি অক্ষর সরানো হচ্ছে:

foo = foo[:-3]

বড় হাতের অক্ষরে রূপান্তর করা:

foo = foo.upper()

সমস্ত কোড এক লাইনে:

foo = ''.join(foo.split())[:-3].upper()

9
আমি মনে রাখবেন যে চাই ''.join(foo.split())বেশী ভালো foo.replace(' ', ''), যখন ইউনিকোড স্ট্রিং ব্যবহার কারণ এটি কোনো সরিয়ে ফেলা হবে হোয়াইটস্পেস অক্ষর, ছাড়াও ' 'অক্ষর (বিশেষ করে, অ-ব্রেকিং স্পেস এছাড়াও সরিয়ে ফেলা হয়)। এটি বলেছে replace()সম্ভবত আরও দ্রুত, সুতরাং এটি ব্যবহার করা যেতে পারে যদি বলি যে ইনপুট স্ট্রিংগুলি ASCII তে
এনকোডড

90

আপনার প্রত্যাশার মতো এটি কাজ করে না কারণ স্ট্রিপটি চরিত্রভিত্তিক। পরিবর্তে আপনার এটি করা দরকার:

foo = foo.replace(' ', '')[:-3].upper()

11
ওপি অনুরোধ অনুসারে এটি হোয়াইটস্পেস অপসারণ করে না; এটি কেবল স্পেস অক্ষর অপসারণ করে।
জন মাচিন

15
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'

2
@ লিডিয়া হ্যাঁ, স্ট্রিপ কেবল স্ট্রিংয়ের শুরু এবং শেষ থেকে সাদা অংশ সরিয়ে দেয়।
এলিজার মিরন

এটা লক্ষনীয় উদাহরণস্বরূপ foo এর জন্য এই চেইন দিতে পারে না যে [3:] foo বিন্যাস [: - 3]
crafter

9

আপনি স্ট্রাইপটি কিছুটা ভুল বুঝে থাকতে পারেন, এটি স্ট্রিং নয় বরং আপনার বর্ণিত স্ট্রিংয়ের কোনও অক্ষরকে স্ট্রিপ করে।

এটার মত:

>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'

সুতরাং পরিবর্তে, শুধু ব্যবহার করুন

text = text[:-3] 

(কিছু না দিয়ে সাদা স্থান প্রতিস্থাপনের পরে)



3

আমি নিয়মিত প্রকাশ প্রকাশ এড়াতে চেষ্টা করি, তবে এটি কার্যকর হয়:

string = re.sub("\s","",(string.lower()))[:-3]


1
স্ট্রিং.লুয়ার () স্ট্রিং.উপার () হওয়া উচিত। আমার ভুল.
krs1

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


1
  1. split
  2. slice
  3. concentrate

এটি শিক্ষানবিসদের জন্য একটি ভাল অনুশীলন এবং এটি অর্জন করা সহজ।

আর একটি উন্নত পদ্ধতি হ'ল এর মতো একটি ফাংশন:

def trim(s):
    return trim(s[slice])

এবং এই প্রশ্নের জন্য, আপনি কেবল শেষ অক্ষরগুলি সরাতে চান, যাতে আপনি এটি লিখতে পারেন:

def trim(s):
    return s[ : -3] 

আমি মনে করি আপনি এই তিনটি চরিত্র কী সে সম্পর্কে যত্নশীল হয়ে পড়েছেন, তাই আপনি হারিয়েছেন। আপনি কেবল শেষ তিনটি সরাতে চান, তবুও তারা কে!

আপনি যদি কিছু নির্দিষ্ট অক্ষর মুছে ফেলতে চান তবে কিছু রায় যদি আপনি যুক্ত করতে পারেন:

def trim(s):
    if [conditions]:   ### for some cases, I recommend using isinstance().
        return trim(s[slice])

0

আপনি কি ভুল ক্রমে ক্রিয়াকলাপ করছেন না? আপনার প্রয়োজন মনে হচ্ছেfoo[:-3].replace(" ", "").upper()


প্রশ্নে নিম্নলিখিত বিষয়গুলির বিন্দু >>> (কোনও শ্বেত স্থান না ধরে)
নোকটিস স্কাইটিওয়ার

0

এটি আপনার হোয়াইটস্পেসের সংজ্ঞায় নির্ভর করে। আমি সাধারণত স্পেস, ট্যাব, লাইন ব্রেক এবং ক্যারিজ রিটার্ন হিসাবে হোয়াইটস্পেসকে কল করব। যদি এটি আপনার সংজ্ঞা হয় তবে আপনি সমস্ত সাদা স্থানের অক্ষরগুলি প্রতিস্থাপন করতে \ s এর সাথে একটি রেজেক্স ব্যবহার করতে চান:

import re

def myCleaner(foo):
    print 'dirty: ', foo
    foo = re.sub(r'\s', '', foo)
    foo = foo[:-3]
    foo = foo.upper()
    print 'clean:', foo
    print

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