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

Python 检查字符串中的最后一个字符是否不是字母,python,regex,string,ironpython,Python,Regex,String,Ironpython,我有这样一个字符串: "A_Origin1_1" 我想删除字符串末尾的所有数字和符号。要获得: "A_Origin" 我可以去掉号码,但不能去掉“\uquot。我该怎么做 这是我目前掌握的代码: def getNumericTail(str): return re.split('[^\d]', str)[-1] def endsWithNumber(str): return bool(getNumericTail(str)) def removeNumericalPort

我有这样一个字符串:

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

"A_Origin"
我可以去掉号码,但不能去掉
“\uquot
。我该怎么做

这是我目前掌握的代码:

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

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

您不需要重新拆分您可以使用str.rstip():


您不需要重新拆分您可以使用str.rstip():


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

>>> 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
>>start=“123”
>>>而不是启动[-1]。isalpha():
开始=开始[:-1]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
而不是启动[-1]。isalpha():
索引器错误:字符串索引超出范围

你可能应该看看;函数名应该是带有下划线的
小写字母,并且您不应该比较
==True

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

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


>>> start
'A_Origin'
str1="A_Origin1_1"

while not str1[-1].isalpha():
    str1=str1[:-1]
print (str1)
请注意,在
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
>>start=“123”
>>>而不是启动[-1]。isalpha():
开始=开始[:-1]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
而不是启动[-1]。isalpha():
索引器错误:字符串索引超出范围
你可能应该看看;函数名应该是带有下划线的
小写字母,并且不应该比较
==True

str1="A_Origin1_1"

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

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

输出:

>>> 
A_Origin
>>>

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

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

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

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

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

如果您想保留您的代码,您可以将
re.split('[^\d]')…
修改为
re.split('[^\d]')
如果您想保留您的代码,谢谢大家的快速回复。只要允许,我会尽快接受答案。您可以将
re.split('[^\d]'…
修改为
re.split('[^\d]')
如果您想保留您的代码。感谢大家的快速回复。只要允许,我会尽快接受答案。请注意,如果字符串中的所有字符都不是字母,则此操作将失败(导致尝试确定
“”[-1]
)。请注意,如果字符串中的所有字符都不是字母,则此操作将失败(导致尝试确定
“”[-1]
)。