我這樣做:捕獲在分裂
my @words =split(/[~,;#&=\.\s\|\(\)\+\-\?\:]+/,$string);
my @processed_words =();
foreach (@words) {push(@processed_words,process_word($_));}
可能有人提出一個簡單的方法處理後撰寫$string
回,同時保持未加工的零件是否完整? 還是split
不是要走這裏的路嗎?
我這樣做:捕獲在分裂
my @words =split(/[~,;#&=\.\s\|\(\)\+\-\?\:]+/,$string);
my @processed_words =();
foreach (@words) {push(@processed_words,process_word($_));}
可能有人提出一個簡單的方法處理後撰寫$string
回,同時保持未加工的零件是否完整? 還是split
不是要走這裏的路嗎?
如果您將分隔符放入捕獲組的正則表達式中,那麼split
將在其結果中包含分隔符 - 它將在單詞和分隔符之間交替。然後可以將未處理的分隔符和處理後的單詞推送到結果數組中。
my @words =split(/([~,;#&=\.\s\|\(\)\+\-\?\:]+)/,$string);
my @processed_words =();
foreach (@words) {
if (/[~,;#&=\.\s\|\(\)\+\-\?\:]/) { // delimiter, just copy it
push(@processed_words, $_)
} else { // process the word
push(@processed_words,process_word($_));
}
不太清楚你所說的「撰寫$字符串分割後回來」,是什麼意思,但也許是這樣的:
my $composed = join(" ", map { process_word($_) } @words);
...會做的伎倆?
在這種情況下,這是一個騙局:http://stackoverflow.com/questions/14907772/split-but-keep-delimiter –
您需要在分隔符周圍使用捕獲組,以將分隔符保留在結果數組中。然後使用for循環,並檢查索引是奇數還是偶數,例如(其將在非字字符和使字字符大寫):
echo 'a"[email protected]%d.e^f$g' | perl -ne '@a=split(/(\W+)/);for($i=0;$i<@a;++$i){ print $i%2 ? @a[$i] : [email protected][$i];}'
(凡$i%2
檢查索引$i
是奇數甚至)。
你的意思是你想重新組合'@ processed_words'與原始分隔符? – ThisSuitIsBlackNot