Re: [請益] 字串中連續逗號以空格隔開
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, , , ,
------------------------------
INIT= = = =
INIT, , , ,
------------------------------
INIT= 1= 2= 3= 4
INIT, 1, 2, 3, 4
※ 引述《luncha (謝謝)》之銘言:
: 各位先進
: 目前在使用perl的字串處理
: 但是無法有效分開字符,想請大家解惑
: 想要把字串中”連續逗號”用空格隔開
: 如下:
: $str1=‘judge(“pat, pat1, pat2”, INIT,,,,,,,,,,,)‘;
: $str2=‘judge(“pa3, pat4, pat5”, INIT, ,, ,,,, ,,,,)‘;
: $str1 =~ s/\,\,/, ,/g ;
: $str2 =~ s/\,\,/, ,/g
: 結果:
: judge(“pat, pat1, pat2 “, INIT, ,, ,, ,, ,, ,,);
: judge(“pa3, pat4, pat5 “, INIT, , , , ,, , , ,, ,);
: 但是我想要的格式是:
: judge(“pat, pat1, pat2”, INIT, , , , , , , , , , ,);
: judge(“pa3, pat4, pat5 “, INIT, , , , , , , , , , ,);
: 請問該怎麼修改呢?
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.26.206.89 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1588165919.A.732.html
推
04/29 23:08,
4年前
, 1F
04/29 23:08, 1F
推
04/30 10:14,
4年前
, 2F
04/30 10:14, 2F
推
05/01 19:44,
4年前
, 3F
05/01 19:44, 3F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 3 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章