关于python:检查字符串中的最后一个字符是否不是一个字母

Check if Last Character in a String is Not a Letter

我有一根这样的绳子:

1
"A_Origin1_1"

我想删除字符串末尾的所有数字和符号。得到:

1
"A_Origin"

我可以去掉数字,但不能去掉"_"。我该怎么做?

这是迄今为止我掌握的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
def getNumericTail(str):
    return re.split('[^\d]', str)[-1]

def endsWithNumber(str):
    return bool(getNumericTail(str))

def removeNumericalPortion(str):
    return str[:-1];

## IN MAIN ##
fixedName ="A_Origin1_1"
while endsWithNumber(fixedName) == True:
    fixedName = removeNumericalPortion(fixedName);


只需反转您的方法-如果最后一个字符是数字,则不删除它,如果它不是字母,则删除它:

1
2
3
4
5
6
7
>>> start ="A_Origin1_1"
>>> while start and not start[-1].isalpha():
    start = start[:-1]


>>> start
'A_Origin'

注意,在while测试中包括start可以确保正确处理空字符串;否则,如果字符串中的所有字符都被剥离,则会崩溃:

1
2
3
4
5
6
7
8
9
10
>>> start ="123"
>>> while not start[-1].isalpha():
    start = start[:-1]



Traceback (most recent call last):
  File"<pyshell#8>", line 1, in <module>
    while not start[-1].isalpha():
IndexError: string index out of range

您可能应该看一下样式指南;函数名应该是lowercase_with_underscores,而不应该比较== True


1
2
3
4
5
str1="A_Origin1_1"

while not str1[-1].isalpha():
    str1=str1[:-1]
print (str1)

输出:

1
2
3
>>>
A_Origin
>>>

只检查字符串的最后一个字符不是字母。而循环将处理直到字符串的最后一个字符是字母。


要匹配末尾没有[a-za-z]的字符串,我将使用:

1
^.*?[^A-Za-z]$


不需要re.split,可以使用str.rstip()

1
2
3
>>> import string
>>> s.rstrip(string.digits+string.punctuation)
'A_Origin'


你可以用re.sub

1
2
>>> re.sub(r'[\W_\d]+$', r'',"A_Origin1_1")
'A_Origin'