如何使用拆分值拆分数据?

时间:2014-08-15 17:57:41

标签: perl

如何使用特定字母拆分数据,但拆分数据存在于先前的拆分行中。

我的perl代码

$data ="abccddaabcdebb";
@split = split('b',"$data");
foreach (@split){
    print "$_\n";
}  

在此代码中给出输出但我预期的输出是:

ab
ccddaab
cdeb
b

我该怎么做

3 个答案:

答案 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| 

所以它会产生四个字符串

  1. ab
  2. cb
  3. b
  4. 空字符串
  5. 幸运的是,split默认情况下会从结果中删除尾随空白字符串,因此会产生三个所需的字符串。

    1. ab
    2. cb
    3. b