正则表达式匹配和替换可变长度数字

时间:2012-11-09 02:10:07

标签: regex perl

我有一个大约4,000个项目的列表,我正在尝试格式化主机名。该列表来自站点ID,主机名使用站点ID格式化。数字部分以零为前缀,长度必须为5位,包括填充。如何编写匹配和前置的正则表达式,以便格式匹配前3个条目?一旦站点ID变为4位,简单地添加“s00”就不会起作用。

s00119rtr1
s00119rtr1
s00120rtr1
120rtr1
120rtr1
120rtr1
121rtr1
121rtr1
121rtr1
124rtr1
124rtr1

谢谢!

2 个答案:

答案 0 :(得分:4)

Perl解决方案:

s/^(\d+)/sprintf('s%05d', $1)/e;

答案 1 :(得分:2)

这是python:

import re

groups = re.match(r'(\d+)(.+)', host)
normalized_host = 's%05d%s' % (int(groups.group(1)), groups.group(2))