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' |
注意,在
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 |
。
您可能应该看一下样式指南;函数名应该是
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]$ |
。
不需要
1 2 3 | >>> import string >>> s.rstrip(string.digits+string.punctuation) 'A_Origin' |
号
你可以用
1 2 | >>> re.sub(r'[\W_\d]+$', r'',"A_Origin1_1") 'A_Origin' |