如何使用特定字母拆分数据,但拆分数据存在于先前的拆分行中。
我的perl代码
$data ="abccddaabcdebb";
@split = split('b',"$data");
foreach (@split){
print "$_\n";
}
在此代码中给出输出但我预期的输出是:
ab
ccddaab
cdeb
b
我该怎么做
答案 0 :(得分:3)
您可以使用lookbehind来保留b
:
$data ="abccddaabcdebb";
@split = split(/(?<=b)/, $data);
foreach (@split){
print "$_\n";
}
将打印出来
ab
ccddaab
cdeb
b
答案 1 :(得分:2)
如果您想要包含字母b
,则需要积极展望,因为分隔符会从结果列表中排除。
my $data ="abccddaabcdebb";
my @split = split(/(?<=b)/, $data);
foreach (@split) {
print "$_\n";
}
来自perldoc -f split
EXPR中与PATTERN匹配的任何内容都被视为将EXPR分隔为不包含分隔符的子字符串(称为“字段”)的分隔符。
答案 2 :(得分:1)
split
的第一个参数定义了要提取的元素之间的区别。 b
并不会将您想要的元素分开,因为它实际上是您想要的部分。
您可以使用
指定b
之后的拆分
my @parts = split /(?<=b)/, $s;
您也可以使用
my @parts = $s =~ /[^b]*b/g;
旁注:
split /(?<=b)/
分割
a b c b b
三个地方
a b|c b|b|
所以它会产生四个字符串
ab
cb
b
幸运的是,split
默认情况下会从结果中删除尾随空白字符串,因此会产生三个所需的字符串。
ab
cb
b