我试图从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个字符(假设没有空白)。


当前回答

分裂 片 集中注意力

对于初学者来说,这是一种很好的锻炼方式,而且很容易实现。

另一个高级方法是这样的函数:

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

对于这个问题,你只需要删除最后一个字符,所以你可以这样写:

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

我觉得你太在乎那三个字了,所以你输了。你只是想除掉后三个,不管他们是谁!

如果你想删除一些特定的字符,你可以添加一些If判断:

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

其他回答

分裂 片 集中注意力

对于初学者来说,这是一种很好的锻炼方式,而且很容易实现。

另一个高级方法是这样的函数:

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

对于这个问题,你只需要删除最后一个字符,所以你可以这样写:

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

我觉得你太在乎那三个字了,所以你输了。你只是想除掉后三个,不管他们是谁!

如果你想删除一些特定的字符,你可以添加一些If判断:

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

你可能对rstrip稍有误解,它去掉的不是字符串,而是你指定的字符串中的任何字符。

是这样的:

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

所以,用

text = text[:-3] 

(将空白替换为空后)

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

这有什么问题?

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

删除所有空格:

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

去掉最后三个字符:

foo = foo[:-3]

转换成大写字母:

foo = foo.upper()

所有代码都在一行中:

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