在字符串末尾递增一个数字

3

我正在尝试解决一个问题,即在字符串的末尾添加1

这意味着:

1. abcd12将变为:abcd13

2. abcd099将变为abcd100

3. abcd01将变为abcd02

4. ddh^add@2204将变为ddh^add@2205

我的代码:

import re
def increment_string(strng):
    regex = re.compile(r'[0-9]')
    match = regex.findall(strng)
    
    nums = ''.join(match[-3:])
    
    add = int(nums)+1
    print(strng+str(add))
increment_string("abcd99")

代码输出结果为:abcd099100,我不知道如何解决。

好的,你的代码从未尝试用新数字替换旧数字 - 它只是将新数字附加到字符串中。因此,解决这个问题的方法是实际执行替换操作。 - ForceBru
2个回答

1

将字符串结尾处的所有数字与[0-9]+$匹配,并使用可调用的re.sub作为替换参数:

import re
def increment_string(strng):
    return re.sub(r'[0-9]+$', lambda x: f"{str(int(x.group())+1).zfill(len(x.group()))}", strng)

print(increment_string("abcd99"))
# => abcd100
print(increment_string("abcd099"))
# => abcd100
print(increment_string("abcd001"))
# => abcd002


看一下Python演示

abcd 应该等于 abcd1。 - Ayush Kumar
@AyushKumar 但是你 "foobar00 应该变成 foobar01"。我理解你需要保持数字的数量。 - Wiktor Stribiżew
1
我刚刚不得不使用if else语句来改进我的代码。感谢你的答案。 - Ayush Kumar

1
将旧的数字替换为'':
import re


def increment_string(strng):
    regex = re.compile(r'[0-9]')
    match = regex.findall(strng)

    nums = ''.join(match[-3:])
    strng = strng.replace(nums, '')
    add = int(nums) + 1

    print(strng + str(add))


increment_string("abcd99")

输出:

abcd100

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接