python - 增加尾随数字时的字符串操作怪异

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

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

提前感谢您的帮助

最佳答案

为什么你不做这样的事情是有原因的:

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/

相关文章:

python OpenCv IMREAD_UNCHANGED 只返回三个 channel

python - 重用来自不同 IPython 笔记本的代码

javascript - 使用 qml 读取多个 Xml 属性

ruby - 检查散列是否有一个包含一些文本的键

python - 解析 CSV 并根据行内容采取行动的最有效方法

python - Python 中有内置的 product() 吗?

html - 如何检查字符串是否包含html标签最通用的方法

regex - 通过perl从字符串中提取数据

c# - 如何将字符串 1 的确切位置获取到字符串 2 C#

PHP 使用数组(?)连接参数字符串?