【问题标题】:How can I split a string and use as prefix the split token on the splitted parts如何拆分字符串并使用拆分部分上的拆分标记作为前缀
【发布时间】:2013-10-03 13:07:40
【问题描述】:

如果我想通过正则表达式拆分字符串,我如何获得拆分器字符串并将我们拆分的部分作为前缀?
例如。如果我有:“BlaBla 主题文学 bla bla 主题数学 bla bla”
我想拆分主题并将主题作为拆分器字符串,我该怎么做?
例如。 split ('Topic[^:]', $string)
将返回:Literature bla bla 但我想返回在拆分 拆分器字符串中匹配的任何内容。我该怎么做?

【问题讨论】:

  • 不,如果您在Topic[^:] 上拆分,您将得到"BlaBla ", "Literature bla bla ", "Math bla bla"。什么是“拆分字符串”?只显示你想要的输出而不是试图解释它。

标签: regex string perl


【解决方案1】:

我猜你的意思是你想在结果字符串中保留拆分分隔符,如下所示:

BlaBla
Topic Literature bla bla
Topic Math bla bla

在这种情况下,您可以使用前瞻断言:

use Data::Dumper;
my $str = "BlaBla Topic Literature bla bla Topic Math bla bla";
my @result = split /(?<=Topic[^:])/, $str;
print Dumper \@result;

输出:

$VAR1 = [
          'BlaBla ',
          'Topic Literature bla bla ',
          'Topic Math bla bla'
        ];

因为前瞻断言的长度为零,所以它在匹配时不会消耗字符串的任何部分。

【讨论】:

    【解决方案2】:

    将拆分括在括号中以捕获它:

    #!/usr/bin/perl
    use strict;
    use Data::Dumper;
    
    my $file = "BlaBla Topic Literature bla bla Topic Math bla bla";
    
    my (@new) = split('(Topic[^:])', $file);
    
    
    print Dumper \@new;
    

    输出:

    $VAR1 = [
              'BlaBla ',
              'Topic ',
              'Literature bla bla ',
              'Topic ',
              'Math bla bla'
            ];
    

    【讨论】:

      【解决方案3】:

      使用积极的前瞻断言:

      split("(?=Topic[^:])",$input)

      use Data::Dumper;
      $x="BlaBla Topic Literature bla bla Topic Math bla bla";
      @y=split("(?=Topic[^:])",$x);
      print Dumper(@y);'
      
      $VAR1 = 'BlaBla ';
      $VAR2 = 'Topic Literature bla bla ';
      $VAR3 = 'Topic Math bla bla';
      

      【讨论】:

        【解决方案4】:

        使用非捕获前瞻:

        perl -le "$s='BlaBla Topic Literature bla bla Topic Math bla bla';print $_ for split '(?=Topic[^:])', $s"
        

        .....

        主题文学.....

        主题数学.....

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-13
          • 1970-01-01
          • 2013-09-15
          相关资源
          最近更新 更多