Re: [請益] 字串中連續逗號以空格隔開

看板Perl作者 (Crazy Rhythm)時間4年前 (2020/04/29 21:11), 編輯推噓3(300)
留言3則, 2人參與, 4年前最新討論串2/3 (看更多)
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
感謝flu大,先消化一下!看來有很多細節要考慮
04/29 23:08, 1F

04/30 10:14, 4年前 , 2F
兩個方法讓我學到lookbehind, join+foreach運用~感謝!
04/30 10:14, 2F

05/01 19:44, 4年前 , 3F
05/01 19:44, 3F
文章代碼(AID): #1UgNqVSo (Perl)
文章代碼(AID): #1UgNqVSo (Perl)