在Perl中,我需要在逗号周围分割一个字符串。但是,字符串本身可以包含逗号,不应该分开。那些逗号用反斜杠转义。我的问题是:如何编写分裂正则表达式?
我目前有:
/\s*(?<!\\),\s*/
但是,这不会删除反斜杠。
来自字符串
apples, pears\, yellow, pears\, green
我想要
apples
pears, yellow
pears, green
但是我得到了
apples
pears\, yellow
pears\, green
如何删除反斜杠?
答案 0 :(得分:4)
作为使用split
的替代方法,您可以使用Text::ParseWords
来允许嵌入或转义分隔符:
use strict;
use warnings;
use Data::Dumper;
use Text::ParseWords;
my $str = 'apples, pears\, yellow, pears\, green';
my @list = quotewords('\s*,\s*', 0, $str);
print Dumper \@list;
<强>输出:强>
$VAR1 = [
'apples',
'pears, yellow',
'pears, green'
];
编辑:向模式添加\s*
将允许您删除不需要的多余空格。另请注意,第二个参数是0
,用于删除分隔符和反斜杠。
作为旁注,如果您只想删除反斜杠,可以使用音译或替换:
$str =~ tr/\\//d;
$str =~ s/\\//g;