正则表达式获取单个数字

时间:2016-11-11 21:44:27

标签: regex perl

我有这个样本数据:

    1
    2a
    12
    23a

使用正则表达式,我想用单个数字替换这种格式的数据:

    01
    02a
    12
    23a

任何其他建议也将是一个很大的帮助

1 个答案:

答案 0 :(得分:1)

您可以将this regex与多行m标志一起使用:

(?<!\d)(\d)(?=[a-zA-Z]|$)

然后替换为0\1

my $str = 'your data'
my $regex = qr/(?<!\d)(\d)(?=[a-zA-Z]|$)/mp;
my $subst = '0\\1';
my $result = $str =~ s/$regex/$subst/rg;
  • (?<!\d)是负面的背后隐藏。仅当前一个字符不是数字
  • 时才会开始匹配
  • (\d)是第一组,它匹配一位数
  • 如果下一个字符是字母((?=[a-zA-Z]|$))或已达到行结束(<{1}}),则
  • [a-zA-Z]结束匹配
  • 替换$是第一个以零开头的组(数字)