Regex Perl拆分逗号分隔的列表,带“;及;
使用Perl,我想Regex Perl拆分逗号分隔的列表,带“;及;,regex,perl,csv,split,Regex,Perl,Csv,Split,使用Perl,我想拆分逗号上的字符串和“and”(前面可能有逗号,也可能没有逗号) “苹果”提供数组(苹果) “苹果和橙色”给出数组(苹果橙色) “苹果、橙色和香蕉”给出数组(苹果、橙色和香蕉) 出于某种原因,以下拆分正则表达式不适用于我: split(/(,| and )/, $string) 试试这个: my @list = split /\s*(?:(?:,\s*)?\band\b|,)\s*/, $string; 例如: perl -E "say join ':', split /\
拆分逗号上的字符串和“and”(前面可能有逗号,也可能没有逗号)
“苹果”
提供数组(苹果)
“苹果和橙色”
给出数组(苹果橙色)
“苹果、橙色和香蕉”
给出数组(苹果、橙色和香蕉)
出于某种原因,以下拆分正则表达式不适用于我:
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 @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 |, /
以下内容适用于您:
split /(?: ,?\s*and\s* | ,\s+? )/x;
以下内容适用于您:
split /(?: ,?\s*and\s* | ,\s+? )/x;
这里有一个解决方案。它依赖于两个拆分来完成所有繁重的工作,并带有一个地图
,以方便使用。它可能与其他答案没有太大区别,但它很干净,而且对眼睛来说相当容易(除了打印)。我认为它可以处理大多数关于空格/和/逗号的变化
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
这里有一个解决方案。它依赖于两个拆分来完成所有繁重的工作,并带有一个地图
,以方便使用。它可能与其他答案没有太大区别,但它很干净,而且对眼睛来说相当容易(除了打印)。我认为它可以处理大多数关于空格/和/逗号的变化
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
谢谢,效果很好。你能告诉我什么是(?:)
匹配的吗?这是一个非捕获组。做普通组(
做的事情,但没有捕获内容。谢谢,效果很好。你能告诉我什么是(?:)
匹配的吗?这是一个非捕获组。做普通组()
可以,但不捕获内容。