【问题标题】:Invalid value after matching string using regex [duplicate]使用正则表达式匹配字符串后的值无效[重复]
【发布时间】:2021-02-16 03:56:44
【问题描述】:

我正在尝试在字符串末尾添加 1 来匹配字符串,我的代码给了我这个问题:

  1. abcd01 应该变成 abcde02 但我的代码给了我这个输出:abcde2
  2. foobar00 应该变成 foobar01 但我的代码给了我这个输出:foobar1
  3. foobar001 应该变成 foobar002
  4. foobar1 应该变成 foobar2 我的代码:
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))

【问题讨论】:

标签: python regex string list


【解决方案1】:

计算零的数量直到第一个数字,然后将它们添加到最后的数字中。完整代码如下:

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

    nums = ''.join(match[-3:])
    strng = strng.replace(nums, '')
    if len(nums) > 0:
        add = int(nums) + 1
        zeros = 0
        for digit in str(nums[:-1]):
            if digit == "0":
                zeros += 1
            else:
                break
        zeros -= len(str(add)) - len(str(add-1))
        add = ''.join(["0" for x in range(zeros)]) + str(add)
    else:
        add = "1"
    print(strng + add)

输出:

abcd02

对于foobar00

increment_string('foobar00')

输出:

foobar01

对于foobar002

increment_string('foobar002')

输出:

foobar003

对于abcd

increment_string('abcd')

输出:

abcd1

【讨论】:

  • 你能解释一下"0" + str(add) if len(str(add)) == 1 else str(add)吗?
  • 其实很简单。如果add 的长度为1(即add 只有1 位),它将add 转换为str 并在其前面添加0。否则,它只是将add 转换为str。这是它的简写:if len(str(add)) == 1: add = "0" + str(add) else: add = str(add)
  • 如果我的回答对你有帮助,请点赞我的回答并接受它作为最好的回答。谢谢!
  • foobar001 应该等于 foobar002 并且 foobar1 应该等于 foobar2
  • 给你一个赞成票,因为你的代码也很有帮助。感谢您宝贵的时间。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
相关资源
最近更新 更多