情况如下:
str='myfile.#.#####-########.ext'
我想用#替换#:456 所以它应该是:
str = 'myfile.456.00456-00000456.ext'
第二种情况:
str= 'myfile.%012d.tga'
用数字456替换模式,使其变为:
str= 'myfile.000000000456.tga'
我可以通过抓取模式使用字符串替换方法来解决这个问题,然后计算数字然后填充零填充。现在,我想知道如何在python中使用正则表达式?有人可以帮忙吗?非常感谢。
答案 0 :(得分:3)
第二种情况是直接的,不需要正则表达式,正则表达式就是一种矫枉过正。我建议你使用字符串格式替换
'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'
答案 1 :(得分:0)
通过没有format
功能的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'
答案 2 :(得分:0)
最后,感谢所有回答我问题的人。那个'lambda'的东西让我想到了,这就是我的问题的答案:
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
不要忘记'import re'来使用正则表达式。