这里很新,所以要温柔。 :)
以下是我想要做的事情的主旨:
我想取一个由分号分隔的数字组成的字符串(例如6; 7; 8; 9; 1; 17; 4; 5; 90)并替换每个“X”数字的分号用“\ n”代替。 “X”号码将由用户定义。
所以如果:
$string = "6;7;8;9;1;17;4;5;90";
$Nth_number_of_semicolons_to_replace = 3;
输出应为:
6;7;8\n9;1;17\n4;5;90
我发现很多关于改变第N次出现的东西,但是我无法找到任何关于改变每个第N次出现的事情,就像我试图描述的那样。
感谢您的帮助!
答案 0 :(得分:7)
use List::MoreUtils qw(natatime);
my $input_string = "6;7;8;9;1;17;4;5;90";
my $it = natatime 3, split(";", $input_string);
my $output_string;
while (my @vals = $it->()) {
$output_string .= join(";", @vals)."\n";
}
答案 1 :(得分:2)
这是一个快速而肮脏的答案。
my $input_string = "6;7;8;9;1;17;4;5;90";
my $count = 0;
$input_string =~ s/;/++$count % 3 ? ";" : "\n"/eg;
答案 2 :(得分:1)
现在没时间回答完整的答案,但这应该可以让你开始。
$string = "6;7;8;9;1;17;4;5;90";
$Nth_number_of_semicolons_to_replace = 3;
my $regexp = '(' . ('\d+;' x ($Nth_number_of_semicolons_to_replace - 1)) . '\d+);';
$string =~ s{ $regexp ) ; }{$1\n}xsmg
答案 3 :(得分:0)
sub split_x{
my($str,$num,$sep) = @_;
return unless defined $str;
$num ||= 1;
$sep = ';' unless defined $sep;
my @return;
my @tmp = split $sep, $str;
while( @tmp >= $num ){
push @return, join $sep, splice @tmp, 0, $num;
}
push @return, join $sep, @tmp if @tmp;
return @return;
}
print "$_\n" for split_x '6;7;8;9;1;17;4;5;90', 3
print join( ',', split_x( '6;7;8;9;1;17;4;5;90', 3 ) ), "\n";
答案 4 :(得分:0)
my $string = "6;7;8;9;1;17;4;5;90";
my $Nth_number_of_semicolons_to_replace = 3;
my $num = $Nth_number_of_semicolons_to_replace - 1;
$string =~ s{ ( (?:[^;]+;){$num} [^;]+ ) ; }{$1\n}gx;
print $string;
打印:
6;7;8 9;1;17 4;5;90
正则表达式解释说:
s{
( # start of capture group 1
(?:[^;]+;){$num} # any number of non ';' characters followed by a ';'
# repeated $num times
[^;]+ # any non ';' characters
) # end of capture group
; # the ';' to replace
}{$1\n}gx; # replace with capture group 1 followed by a new line
答案 5 :(得分:0)
如果你有5.10或更高,这可以解决问题:
#!/usr/bin/perl
use strict;
use warnings;
my $string = '1;2;3;4;5;6;7;8;9;0';
my $n = 3;
my $search = ';.*?' x ($n -1);
print "string before: [$string]\n";
$string =~ s/$search\K;/\n/g;
print "print string after: [$string]\n";
HTH, 保罗