检查字符串中的最后一个字符是否不是字母

Check if Last Character in a String is Not a Letter

我有一个这样的字符串:

"A_Origin1_1"

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

"A_Origin"

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

这是我目前的代码:

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

你可以使用 re.sub

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

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

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

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

>>> start = "A_Origin1_1"
>>> while start and not start[-1].isalpha():
    start = start[:-1]


>>> start
'A_Origin'

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

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

你应该看看 the style guide;函数名应该是 lowercase_with_underscores 并且你不应该比较 == True.

str1="A_Origin1_1"

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

输出:

>>> 
A_Origin
>>>

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

要匹配末尾没有 [A-Za-z] 的字符串,我会使用:

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