使用正则表达式在python中用数字替换连续符号

使用正则表达式在python中用数字替换连续符号,python,regex,Python,Regex,情况是这样的: str='myfile.#.#####-########.ext' 我想把#换成号码:456 因此,它应该是: str = 'myfile.456.00456-00000456.ext' 第二种情况: str= 'myfile.%012d.tga' 将图案替换为数字456,使其成为: str= 'myfile.000000000456.tga' 我可以使用字符串替换方法解决这个问题,方法是抓取模式,然后计算数字,然后用零填充。现在,我想知道如何在python中使用正则表达

情况是这样的:

str='myfile.#.#####-########.ext'
我想把#换成号码:456 因此,它应该是:

str = 'myfile.456.00456-00000456.ext'
第二种情况:

str= 'myfile.%012d.tga'
将图案替换为数字456,使其成为:

str= 'myfile.000000000456.tga'

我可以使用字符串替换方法解决这个问题,方法是抓取模式,然后计算数字,然后用零填充。现在,我想知道如何在python中使用正则表达式来实现它?有人能帮忙吗?非常感谢。

第二种情况是直截了当的,不需要正则表达式,而正则表达式将是一种过度使用。我建议您使用字符串格式替换

'myfile.%012d.tga' % 456
Out[21]: 'myfile.000000000456.tga'
第一种情况很棘手,但也有可能

>>> def repl(m):
    return "{{0:0{}}}".format(len(m.group(1)))

>>> re.sub(r"(#+)", repl, st).format(456)
'myfile.456.00456-00000456.ext'

通过re.sub,无需
格式
功能

>>> s = 'myfile.#.#####-########.ext'
>>> re.sub(r'#+', lambda m: '456' if len(m.group()) == 1 else m.group()[:-1].replace('#', '0') + '456', s)
'myfile.456.0000456-0000000456.ext'
第二种情况,

>>> s = 'myfile.%012d.tga'
>>> re.sub(r'%(\d+)d', lambda m: str('0' * int(m.group(1)))[:-1] + '456', s)
'myfile.00000000000456.tga'

最后,感谢所有回答我问题的人。“lambda”这个东西真的给我一个想法,下面是我问题的答案:

我的第一个案例使用了“#”: 我的第二个案例使用%0xd格式: 下面是上述两种情况的简单组合:
不要忘记“导入re”以使用正则表达式。

。在那里玩regex。这是一个很棒的网站。从替换的类型猜测,它也需要一些编程。不太可能由正则表达式单独完成。如果是
##
###
,该怎么办?@AvinashRaj:应该是
0456
00456
。@AvinashRaj:这是我所期望的:如果使用###和#。应该是456和456。如果#位低于数字,则将忽略该数字。如果#数字更高,则会在标题#中填入“0”。所以###########将是0456。谢谢,它工作得很好。顺便说一句,从你的代码中提取,我设法使用regex进行多次替换来找到答案。我已经把代码贴在下面了。谢谢。
s = 'myfile.##.####.########.ext'
print re.sub('#+', lambda x : '456'.zfill(len(x.group())) ,s)

---> myfile.456.0456.00000456.ext
s = 'myfile.%06d--%012d--%02d.ext'
print re.sub('%0[0-9]+d', lambda x : x.group() % 456 ,s)

r---> myfile.000456--000000000456--456.ext
s = 'myfile.##.####.########.%06d---%02d.ext'
x=re.sub('#+', lambda x : '456'.zfill(len(x.group())) ,s)
print re.sub('%0[0-9]+d', lambda x : x.group() % 456 ,x)

---> myfile.456.0456.00000456.000456---456.ext