我需要找到字符串中的最后一个数字(不是一个数字),并替换为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)))
答案 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