如何获取字符串中的最后一个数字和+1?

时间:2013-04-21 03:09:11

标签: python

我需要找到字符串中的最后一个数字(不是一个数字),并替换为number+1,例如:/path/testcase9.in/path/testcase10.in。如何在python中更好或更有效地执行此操作?

以下是我现在使用的内容:

reNumber = re.compile('(\d+)')

def getNext(path):
    try:
        number = reNumber.findall(path)[-1]
    except:
        return None
    pos = path.rfind(number)
    return path[:pos] + path[pos:].replace(number, str(int(number)+1))

path = '/path/testcase9.in'
print(path + " => " + repr(self.getNext(path)))

2 个答案:

答案 0 :(得分:3)

LAST_NUMBER = re.compile(r'(\d+)(?!.*\d)')

def getNext(path):
    return LAST_NUMBER.sub(lambda match: str(int(match.group(1))+1), path)

这使用re.sub,特别是,“替换”的功能是一个用原始匹配调用的函数,以确定应该替换它的内容。

它还使用negative lookahead断言来确保正则表达式只匹配字符串中的最后一个数字。

答案 1 :(得分:0)

在你的re中使用“。*”,你可以选择最后一个数字之前的所有字符(因为它是贪婪的):

import re

numRE = re.compile('(.*)(\d+)(.*)')

test = 'somefile9.in'
test2 = 'some9file10.in'

m = numRE.match(test)
if m:
    newFile = "%s%d%s"%(m.group(1),int(m.group(2))+1,m.group(3))
    print(newFile)

m = numRE.match(test2)
if m:
    newFile = "%s%d%s"%(m.group(1),int(m.group(2))+1,m.group(3))
    print(newFile)

结果是:

somefile10.in
some9file11.in