1

我需要在字符串中找到最后出现的数字(不是单个数字),并替换为number+1,例如:/path/testcase9.into /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)))
4

2 回答 2

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,特别是,让“替换”成为与原始匹配调用的函数以确定应该替换它的功能的能力。

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

于 2013-04-21T03:14:43.727 回答
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
于 2013-04-21T03:20:02.163 回答