Re: [请益] 字串中连续逗号以空格隔开

楼主: flu (Crazy Rhythm)   2020-04-29 21:11:57
use strict;
use warnings;
use feature qw/say/ ;
#方式1
my $str = "INIT, ,, ," ;
$str =~ s/\s+//g ;
#以下使用到的 (?<=) 是 lookbehind assertion
# 解释起来意思是当看到","时,如果它之前也有","
# 那才匹配成功,
#而且取代时(?<=)里的东西不会被取代,因为匹配到
# 的是(?<=)后的东西。再来是它像/^/, /$/ 一样
# 不占字符宽度,所以下次比对的开始位置只离一个
# 字符而已。如果用 /,,/ 比对,就会离两个字符
say $str =~ s/(?<=,),/ $_/gr foreach qw/= ,/ ;
#方式2
my $str2 = "INIT,1,2,3,4" ;
for my $_s ($str, $str2){
say '-' x 30 ;
#关于split的第三个参数造成的差异
# 原po的例子刚好与perldoc里举的例子相似
my @tokens = split /,/, $_s, -1 ;
say join $_ , @tokens foreach ("= ", ", ") ;
}
__END__
#输出
INIT, = = =
INIT, , , ,
作者: luncha (谢谢)   2020-04-29 23:08:00
感谢flu大,先消化一下!看来有很多细节要考虑两个方法让我学到lookbehind, join+foreach运用~感谢!
作者: herculus6502 (金麟岂是池中物)   2020-05-01 19:44:00

Links booklink

Contact Us: admin [ a t ] ucptt.com