Python删除字符串的最后3个字符

时间:2009-11-25 17:14:52

标签: python string

我正在尝试从python中的字符串中删除最后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个字符(假设没有空格)

任何提示?

10 个答案:

答案 0 :(得分:211)

删除任何和所有空格:

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

删除最后三个字符:

foo = foo[:-3]

转换为大写字母:

foo = foo.upper()

所有代码都在一行中:

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

答案 1 :(得分:89)

它无法正常工作,因为条带是基于字符的。你需要这样做:

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

答案 2 :(得分:14)

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

答案 3 :(得分:8)

你可能会略微误解rstrip,它不会删除字符串,而是删除你指定的字符串中的任何字符。

像这样:

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

相反,只需使用

即可
text = text[:-3] 

(用空格替换空格后)

答案 4 :(得分:2)

>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'

答案 5 :(得分:2)

我尽量避免使用正则表达式,但这似乎有效:

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

答案 6 :(得分:1)

这有什么问题?

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

答案 7 :(得分: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])

答案 8 :(得分:0)

您是不是以错误的顺序执行操作?您的要求似乎是foo[:-3].replace(" ", "").upper()

答案 9 :(得分: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")