【问题标题】:Increment last digits of string in python在python中增加字符串的最后一位
【发布时间】:2020-12-23 09:45:33
【问题描述】:

我想在 python 3 中增加从 01 开始的主机名。我找到了一些解决方案,但在 09 之后我遇到了问题。我的代码将它增加到 010。我该如何解决这个问题?

我的代码

re.sub('\d(?!\d)', lambda x: str(int(x.group(0)) + 1), hostname01)

【问题讨论】:

  • 你可以改用\d+,现在只取最后一个数字。
  • 感谢您的回复,但它将“hostname01”增加到“hostname2”。它应该像 hostname01, hostname02, ........, hostname09, hostname10, hostname11,...
  • 所以它将是 hostname14 而不是必须成为 hostname15 的 hostname014?喜欢这个(?:[1-8]\d*|09)$regex101.com/r/TcAgaC/1

标签: python-3.x regex string increment re


【解决方案1】:

您可以匹配数字 1-9 后跟可选数字 0-9 或匹配 09

(?:[1-9]\d*|09)$

Regex demo | Python demo

import re

hostnames = [
    "hostname01", "hostname08", "hostname09", "hostname10", "hostname99", "hostname675"
    ]
    
for hostname in hostnames:
    print(re.sub('(?:[1-9]\d*|09)$', lambda x: str(int(x.group(0)) + 1), hostname))

输出

hostname02
hostname09
hostname10
hostname11
hostname100
hostname676

【讨论】:

  • 这就是我想要的。非常感谢,谢谢。
  • 还有一个问题。是否可以从 hostname00 开始并递增?我尝试使用相同的代码,但没有成功。
  • 您可以将 9 设为可选 (?:[1-9]\d*|09?)$ regex101.com/r/5LLe9J/1 请参阅 ideone.com/1Vojbs
【解决方案2】:

使用zfill添加一个0

像这样:

import re
hostname01 = "hostname10"
print(re.sub('(\d+)', lambda x: str(int(x.group(0)) + 1).zfill(2), hostname01))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2021-06-24
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多