递增尾随数字时字符串操作怪异

clo*_*d68 2 python regex string

我得到了这段代码:

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
Run Code Online (Sandbox Code Playgroud)

这假设只增加给定字符串的最后一位数字.但是如果运行该代码,您将看到如果字符串中的数字与最后一个数字相同,那么如果您继续运行该脚本,它将一个接一个地增加它.任何人都可以帮我找出原因吗?

预先感谢您的任何帮助

Pre*_*eti 8

你有没有理由不做这样的事情:

prefix, version = re.match(r"(.*[^\d]+)([\d]+)$", myString).groups()
newstring = prefix + str(int(version)+1).rjust(len(version), '0')
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 这实际上将"结转"版本号:("09" - >"10")和("99" - >"100")
  • 此正则表达式假定在最后的最终版本子字符串之前至少有一个非数字字符.如果这不匹配,它会抛出一个AttributeError.您可以重新构建它以抛出更合适或特定的异常(例如,如果re.match(...)返回None;请参阅下面的注释以获取更多信息).

相应调整.