我得到了这段代码:
myString = 'blabla123_01_version6688_01_01Long_stringWithNumbers'
versionSplit = re.findall(r'-?\d+|[a-zA-Z!@#$%^&*()_+.,<>{}]+|\W+?', myString)
for i in reversed(versionSplit):
id = versionSplit.index(i)
if i.isdigit():
digit = '%0'+str(len(i))+'d'
i = int(i) + 1
i = digit % i
versionSplit[id]=str(i)
break
final = ''
myString = final.join(versionSplit)
print myString
假设只增加给定字符串的最后一位数字。但是,如果您运行该代码,您将看到,如果字符串中的数字与最后一个数字相同,那么如果您继续运行该脚本,它将一个接一个地增加。谁能帮我找出原因?
提前感谢您的帮助
最佳答案
为什么你不做这样的事情是有原因的:
prefix, version = re.match(r"(.*[^\d]+)([\d]+)$", myString).groups()
newstring = prefix + str(int(version)+1).rjust(len(version), '0')
注意事项:
- 这实际上会正确地“继承”版本号:("09"-> "10") 和 ("99"-> "100")
- 此正则表达式在末尾的最终版本子字符串之前假定至少有一个非数字字符。如果不匹配,它将抛出一个
AttributeError
。您可以重组它以抛出更合适或更具体的异常(例如,如果re.match(...)
返回None
;请参阅下面的评论以获取更多信息)。<
相应地调整。
关于python - 增加尾随数字时的字符串操作怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10134622/