使用正则表达式添加前导零

hpi*_*que 27 regex language-agnostic

我想在字符串的所有数字中添加一定数量的前导零(最多3个).例如:

输入: /2009/5/song 01 of 12

输出: /2009/0005/song 0001 of 0012

使用正则表达式执行此操作的最佳方法是什么?

编辑:

我选了第一个正确答案.但是,所有答案都值得一读.

Sno*_*are 29

在Perl中:

s/([0-9]+)/sprintf('%04d',$1)/ge;
Run Code Online (Sandbox Code Playgroud)

  • 在将它与我的Java实现进行比较后,让我想学习Pearl. (8认同)
  • +1这是一个华丽简单的正则表达式,并且符合要求. (2认同)

Ign*_*ams 5

使用支持回调的内容,以便处理匹配:

>>> r=re.compile(r'(?:^|(?<=[^0-9]))([0-9]{1,3})(?=$|[^0-9])')
>>> r.sub(lambda x: '%04d' % (int(x.group(1)),), 'dfbg345gf345', sys.maxint)
'dfbg0345gf0345'
>>> r.sub(lambda x: '%04d' % (int(x.group(1)),), '1x11x111x', sys.maxint)
'0001x0011x0111x'
>>> r.sub(lambda x: '%04d' % (int(x.group(1)),), 'x1x11x111x', sys.maxint)
'x0001x0011x0111x'
Run Code Online (Sandbox Code Playgroud)