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

时间:2015-01-09 14:48:45

标签: python regex string ironpython

我有一个像这样的字符串:

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

5 个答案:

答案 0 :(得分:4)

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

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


>>> start
'A_Origin'

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

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

答案 1 :(得分:2)

str1="A_Origin1_1"

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

输出:

>>> 
A_Origin
>>>

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

答案 2 :(得分:0)

您可以使用re.sub

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

为了匹配最后没有[A-Za-z]的字符串,我会使用:

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