2009-11-25 13 views
78

मैं अजगर में स्ट्रिंग से अंतिम 3 वर्णों को हटाने का प्रयास कर रहा हूं, मुझे नहीं पता कि ये वर्ण क्या हैं इसलिए मैं rstrip का उपयोग नहीं कर सकता, मुझे किसी को भी हटाने की आवश्यकता है सफेद स्थान और अपर-केस में बदलने कापायथन एक स्ट्रिंग के पिछले 3 वर्णों को हटाएं

एक उदाहरण होगा:

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

यह काम करता है और मुझे BS12 जो है जो मैं चाहता देता है, लेकिन यदि पिछले 4 & 3 वर्ण ही मैं दोनों ढीला कर रहे हैं उदाहरण के लिए यदि foo = "BS11 1AA" मुझे बस 'BS'

प्राप्त करें

foo के उदाहरण हो सकता है:

BS1 1AB 
bs11ab 
BS111ab 

स्ट्रिंग 6 या 7 वर्ण हो सकता है और मैं पिछले 3 (कोई सफेद स्थान मानकर)

किसी भी सुझाव दिए गए ड्रॉप करने की आवश्यकता है?

+7

Noctis के जवाब सबसे अच्छा है। बस केह रहा हू। – Cinder

+1

स्वीकृत उत्तर को न देखें, नीचे जाएं आपको नोटिक्स का जवाब –

उत्तर

131

निकाला जा रहा है (कुछ भी नहीं के साथ खाली स्थान के बदलने के बाद) किसी भी और सभी खाली स्थान के:

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

निकाला जा रहा है पिछले तीन अक्षर: एक पंक्ति में है कि कोड की

foo = foo.upper() 

सभी:

foo = foo[:-3] 

बड़े अक्षरों में कनवर्ट कर रहा

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

मैं यह ध्यान रखना चाहूंगा कि '' '.join (foo.split())' foo.replace ('', '') 'से बेहतर है, जब यूनिकोड तारों पर उपयोग किया जाता है क्योंकि यह किसी भी * व्हाइटस्पेस * चरित्र को हटा देता है, '' 'चरित्र के अलावा (विशेष रूप से, गैर-ब्रेकिंग रिक्त स्थान भी हटा दिए जाते हैं)। उस ने कहा कि 'प्रतिस्थापन() 'शायद अधिक तेज़ है, इसलिए इसका उपयोग किया जा सकता है, अगर इनपुट स्ट्रिंग को एएससीआईआईआई में एन्कोड किया जाता है, जिसमें केवल एक स्पेस कैरेक्टर होता है (मैं यहां पाइथन 2 टर्मिनोलॉजी का उपयोग कर रहा हूं।) – EOL

85

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

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

दिखाई देगा जो ओपी के अनुरोध के रूप में WHITESPACE को नहीं हटाता है; यह केवल स्पेस वर्ण हटा देता है। –

1

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

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

आप rstrip थोड़ा गलत समझा हो सकता है, यह एक स्ट्रिंग लेकिन स्ट्रिंग में किसी भी चरित्र आपके द्वारा निर्दिष्ट नहीं स्ट्रिप्स।

इस तरह

:

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

बजाय, बस का उपयोग

text = text[:-3] 

0

आप गलत क्रम में आपरेशन प्रदर्शन नहीं कर रहे हैं? आप आवश्यकता foo[:-3].replace(" ", "").upper()

+0

** प्रश्न में निम्नलिखित पर इंगित करें >>> ** (कोई सफेद स्थान नहीं मानते) –

1

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

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

+0

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

0

यह कुछ खाली स्थान के की अपनी परिभाषा पर क्या निर्भर करता है। मैं आमतौर पर स्पेस, टैब, लाइन ब्रेक और कैरिज रिटर्न होने के लिए व्हाइटस्पेस को कॉल करता हूं।यदि आप एक regex का उपयोग करने के लिए सभी खाली स्थान के charactors को बदलने के लिए \ 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") 
13
>>> foo = "Bs12 3ab" 
>>> foo[:-3] 
'Bs12 ' 
>>> foo[:-3].strip() 
'Bs12' 
>>> foo[:-3].strip().replace(" ","") 
'Bs12' 
>>> foo[:-3].strip().replace(" ","").upper() 
'BS12' 
+0

स्ट्रिप पहले से ही सभी व्हाइटस्पेस को हटा देता है तो प्रतिस्थापित की आवश्यकता है? – Lidia

+2

@ लिडिया हां, स्ट्रिप केवल स्ट्रिंग की शुरुआत और अंत से व्हाइटस्पेस को हटा देती है। –

+0

यह ध्यान दिया जाना चाहिए कि आप इसे उदाहरण के लिए श्रृंखला नहीं बना सकते हैं foo [3:] foo [: - 3] – crafter

संबंधित मुद्दे