पायथन एक स्ट्रिंग के अंतिम 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 में एन्कोड किए जाने के लिए जाने जाते हैं, जिसमें केवल एक ही अंतरिक्ष वर्ण होता है (मैं यहां पायथन 2 शब्दावली का उपयोग कर रहा हूं।)
एरिक ओ लेबिगॉन

90

यह काम नहीं करता है क्योंकि आप उम्मीद करते हैं क्योंकि पट्टी चरित्र आधारित है। आपको इसके बजाय यह करने की आवश्यकता है:

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

11
ओपी के अनुरोध के अनुसार WHITESPACE को हटाया नहीं गया है; यह केवल अंतरिक्ष वर्ण हटाता है।
जॉन मैकिन

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

हो सकता है कि आपको गलत तरीके से rstrip किया गया हो, यह एक स्ट्रिंग नहीं बल्कि आपके द्वारा निर्दिष्ट स्ट्रिंग के किसी भी वर्ण को स्ट्रिप्स करता है।

ऐशे ही:

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

इसलिए इसके बजाय, बस उपयोग करें

text = text[:-3] 

(कुछ नहीं के साथ व्हाट्सएप की जगह लेने के बाद)



3

मैं नियमित अभिव्यक्तियों से बचने की कोशिश करता हूं, लेकिन यह काम करता है:

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


1
string.lower () string.upper () होनी चाहिए। मेरी गलती।
krs1

यह एकमात्र समाधान है जो
व्हाट्सएप को

1

इसमें गलत क्या है?

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

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

यह व्हाट्सएप की आपकी परिभाषा पर निर्भर करता है। मैं आमतौर पर व्हाट्सएप को स्पेस, टैब, लाइन ब्रेक और कैरिज रिटर्न कहता हूं। यदि यह आपकी परिभाषा है जो आप सभी व्हॉट्सएप के रीपेक्स को बदलने के लिए \ regex का उपयोग करना चाहते हैं:

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