Removing spaces between single letters

后端 未结 8 2134
一向
一向 2021-01-07 06:01

I have a string that may contain an arbitrary number of single-letters separated by spaces. I am looking for a regex (in Perl) that will remove spaces between all (unknown n

8条回答
  •  猫巷女王i
    2021-01-07 06:26

    Now I have the slowest and the fastest.

    #!/usr/bin/perl
    use 5.012;
    use warnings;
    use Benchmark qw(cmpthese);
    my @strings = ('a b c', 'ab c d', 'a bcd e f gh', 'abc d');
    
    cmpthese( 0, {
        Eric_Storm  => sub{ for my $string (@strings) { $string =~ s{\b(\w) ((?: \s+ (\w)\b)+)}{$1 . join '', split m|\s+|, $2}gex; } },
        canavanin   => sub{ for my $string (@strings) { $string =~ s/\b(\w)\s+(?=\w\b)/$1/g; } },
        Alan_Moore  => sub{ for my $string (@strings) { $string =~ s/(?<=(? sub{ for my $string (@strings) { $string =~ s/\PL\pL\K (?=\pL(?!\pL))//g; } },
        keep_asc    => sub{ for my $string (@strings) { $string =~ s/[^a-zA-Z][a-zA-Z]\K (?=[a-zA-Z](?![a-zA-Z]))//g; } },
        no_regex    => sub{ for my $string (@strings) { my @s; my $t = ''; 
        for my $el (split /\s+/, $string) {if (length $el > 1) { push @s, $t if $t; $t = ''; push @s, $el; } else { $t .= $el; } }
        push @s, $t if $t;
        #say "@s";
        } },
    });
    

    .

               Rate  no_regex Alan_Moore Eric_Storm canavanin  keep_uni keep_asc                                                                                                                                                             
    no_regex    98682/s        --       -64%       -65%      -66%      -81%     -87%                                                                                                                                                             
    Alan_Moore 274019/s      178%         --        -3%       -6%      -48%     -63%                                                                                                                                                             
    Eric_Storm 282855/s      187%         3%         --       -3%      -46%     -62%                                                                                                                                                             
    canavanin  291585/s      195%         6%         3%        --      -45%     -60%
    keep_uni   528014/s      435%        93%        87%       81%        --     -28%
    keep_asc   735254/s      645%       168%       160%      152%       39%       --
    

提交回复
热议问题