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


146

我正在尝试从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个字符(假设没有空格)

有小费吗?

Answers:


278

删除所有空格:

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

删除最后三个字符:

foo = foo[:-3]

转换为大写字母:

foo = foo.upper()

所有这些代码都在一行中:

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

9
我要指出的是,''.join(foo.split())它比foo.replace(' ', '')于在unicode字符串上使用时要好,因为它除了删除字符(特别是还删除了不间断空格)之外,还删除了所有空白字符' '。这就是说replace()大概要快得多,因此它可以用来比如说,如果输入字符串被称为ASCII码,其中只有一个空格字符(我使用Python 2术语,在这里。)进行编码
埃里克ØLebigot


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

2
@Lidia是的,strip仅从字符串的开头和结尾删除空格。
Eliezer Miron's

应当指出,您不能将其链接起来,例如foo [3:] foo [:-3]
手工艺者

9

您可能对rstrip略有误解,它不会去除字符串,而是去除您指定的字符串中的任何字符。

像这样:

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

因此,只需使用

text = text[:-3] 

(用空白替换空白后)


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

3

我尝试避免使用正则表达式,但这似乎可行:

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


1
string.lower()应该是string.upper()。我的错。
2009年

这是解决空白问题的唯一解决方案
Erik Aronesty


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()


指向问题中的以下内容>>>(假设没有空格)
Noctis Skytower

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")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.