使用Perl,我想split
上逗號的字符串和該「和」(其可以或可以不通過逗號之前。Perl的分裂逗號與分隔的列表「和」
"Apple"
給出陣列(Apple)
"Apple and Orange"
給出陣列(Apple Orange)
"Apple, Orange, and Banana"
給出陣列(Apple Orange Banana)
出於某種原因,下面分正則表達式是不是爲我工作:
split(/(,| and)/, $string)
使用Perl,我想split
上逗號的字符串和該「和」(其可以或可以不通過逗號之前。Perl的分裂逗號與分隔的列表「和」
"Apple"
給出陣列(Apple)
"Apple and Orange"
給出陣列(Apple Orange)
"Apple, Orange, and Banana"
給出陣列(Apple Orange Banana)
出於某種原因,下面分正則表達式是不是爲我工作:
split(/(,| and)/, $string)
試試這個:
my @list = split /\s*(?:(?:,\s*)?\band\b|,)\s*/, $string;
例子:
perl -E "say join ':', split /\s*(?:(?:,\s*)?\band\b|,)\s*/, 'apple, orange, and banana'"
apple:orange:banana
或者一個簡單的工作情況下,你例如:
/,? and |,/
my $str = 'Apple, Orange, and Banana';
$str =~ s/,?\s*and\b/,/;
my @words = split /\s*,\s*/, $str;
以下split
應該爲你工作:
split /(?: ,?\s*and\s* | ,\s+?)/x;
這裏有一個解決方案。它依靠兩個split
進行所有繁重工作,爲了方便起見使用了map
。它可能與其他答案沒有太大區別,但它很乾淨,而且在眼睛上相當容易(除了打印)。我認爲它可以適用於空白/和/逗號的大部分變體。
use warnings;
use strict;
my @w = ("Apple", "Apple and Orange", "Apple, Orange, and Banana",
"Apple, Orange and Banana ,and Pineapple");
for (@w) {
print join (':', humanize($_)), "\n";
}
sub humanize {
my $str = shift;
my @list = split /\s*and\s*/, $str;
@list = map { split /\s*,\s*/, $_ } @list;
return @list;
}
輸出:
Apple
Apple:Orange
Apple:Orange:Banana
Apple:Orange:Banana:Pineapple
謝謝,可以完美運行。你能讓我知道'(?:)'匹配什麼嗎? –
這是一個非捕獲組。做一個正常的組(')',但不捕獲內容。 – Qtax