我有一个像这样的字符串:
"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);
答案 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]$