在perl中插入结果中的空格

use*_*387 2 regex perl

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

ike*_*ami 7

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

s/..(?!\z)\K/ /sg
Run Code Online (Sandbox Code Playgroud)

(?!\z)你不添加尾随空格保证.


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

s/(?!^)(?=(?:..)+(?!.))/ /sg
Run Code Online (Sandbox Code Playgroud)

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

这不是很有效.reverse输入可能更有效,使用第一个解决方案,然后reverse输出.


AKH*_*and 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) },
    });
Run Code Online (Sandbox Code Playgroud)

似乎使用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%       --
Run Code Online (Sandbox Code Playgroud)