【问题标题】:Using the Perl split function, but keeping certain delimiters使用 Perl 拆分功能,但保留某些分隔符
【发布时间】:2011-03-15 07:35:05
【问题描述】:

我有一个字符串,我需要在某个字符上进行拆分。但是,我只需要在其中一个字符上分割字符串时,它的两侧是数字。相同的字符存在于字符串的其他位置,但两侧会有一个字母——至少在一侧。我尝试如下使用拆分功能(使用“x”作为有问题的字符):

my @array = split /\dx\d/, $string;

但是,此功能会删除“x”和侧翼数字。如果可能的话,我想保留这些数字。有什么想法吗?

【问题讨论】:

    标签: regex perl split


    【解决方案1】:

    您可以先将要拆分的角色替换为独特的东西,然后再拆分该独特的东西,如下所示:

    $string =~ s/(\d)x(\d)/\1foobar\2/g;
    my @array = split /foobar/, $string;
    

    【讨论】:

      【解决方案2】:

      使用零宽度断言:

      my @array = split /(?<=\d)x(?=\d)/, $string;
      

      这将匹配前面和后面跟着一个数字的x,但不消耗数字本身。

      【讨论】:

      • Marcelo,这会匹配字符串开头/结尾的 x 吗?
      • @DVK:不,因为x 的实例前面不会有数字。您可以通过否定断言来实现这一点(在字符串的开头和结尾匹配 x):/(?&lt;!\D)x(?!\D)/ 但它当然与所述问题不匹配。
      • 我不确定......如果没有 OP 的明确澄清,我至少有点考虑将“^x3”视为有效的分隔符......但你可能是对的.
      • @DVK:OP 的短语是“两侧是数字”。我想您可能会争辩说,在"x123" 中,x 的两侧是数字,但这是一个延伸。
      猜你喜欢
      • 2016-12-27
      • 1970-01-01
      • 2021-07-14
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多