在perl中插入结果中的空格

时间:2013-01-29 19:31:00

标签: regex perl

我有一个像600000的号码。我想在每两位数之后插入空格。我该怎么做?结果应为60 00 00

4 个答案:

答案 0 :(得分:7)

如果12345成为12 34 5,我建议

s/..(?!\z)\K/ /sg

(?!\z)确保您不添加尾随空格。


如果12345应该成为1 23 45,我建议

s/(?!^)(?=(?:..)+(?!.))/ /sg

(?!^)可确保您不添加前导空格。

效率不高。 reverse输入可能更有效,使用第一个解决方案,然后reverse输出。

答案 1 :(得分:5)

比较了几种不同的方法。我假设您不想修改原始字符串,否则100%正则表达式版本可能会做得更好。

#!/usr/bin/perl

use strict;
use warnings;

use Benchmark ();

my $x = "1234567890";

Benchmark::cmpthese(1_000_000, {
    unpack   => sub { join(" ", unpack("(A2)*", $x)) },
    regex    => sub { (my $y = $x) =~ s/..(?!\z)\K/ /sg; $y },
    regex514 => sub { $x =~ s/..(?!\z)\K/ /sgr },
    join     => sub { join(" ", $x =~ /..?/sg) },
    });

似乎使用unpack()是最快的

             Rate     join    regex regex514   unpack
join     221828/s       --     -18%     -26%     -42%
regex    271665/s      22%       --     -10%     -29%
regex514 300933/s      36%      11%       --     -22%
unpack   383877/s      73%      41%      28%       --

答案 2 :(得分:3)

试试这个:

$number = '600000';
$number =~ s/(\d{2})(?!$)/$1 /g;
print $number;

(\d{2})表示'两位数'。 (?!$)表示“只要字符串的结尾不会立即发生”,因为数字后面不需要空格。

答案 3 :(得分:2)

这是另一种选择:

use strict;
use warnings;

my $number = 600000;
my $spacedNum = join ' ', $number =~ /..?/g;
print $spacedNum;

输出:

60 00 00