我想拆分有一定的重复图案的字符串,例如:到目前为止Perl以最有效的方式在重复模式中分割字符串?
$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";
到
@array=(-SOMETHING-ELSE-,-LAST);
我尝试作为一个Perl新手
split(/G{2,}/,$string);
不幸的是,这只会导致GG分裂的模式 - 而不是我期望得到的贪婪的GGGGG或GGG模式导致2个数组元素。
我想拆分有一定的重复图案的字符串,例如:到目前为止Perl以最有效的方式在重复模式中分割字符串?
$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";
到
@array=(-SOMETHING-ELSE-,-LAST);
我尝试作为一个Perl新手
split(/G{2,}/,$string);
不幸的是,这只会导致GG分裂的模式 - 而不是我期望得到的贪婪的GGGGG或GGG模式导致2个数组元素。
不,这似乎(大部分)按预期工作。下面的代码:
use strict;
use warnings;
$_="GGGGG-SOMETHING-ELSE-GGG-LAST";
my @a=split(/G{2,}/,$_);
print join(",",@a) . "\n";
产生输出:
,-SOMETHING-ELSE-,-LAST
的问题是,有这空字符串的第一元素。因此,要解决这个问题,你可以这样做:
use strict;
use warnings;
$_="GGGGG-SOMETHING-ELSE-GGG-LAST";
my @a=grep{$_ ne ""}(split(/G{2,}/,$_));
print join(",",@a) . "\n";
这会产生你想要什么:
-SOMETHING-ELSE-,-LAST
我只是检查你的代码在我的机器上工作得很好:
$string = "GGGGG-SOMETHING-ELSE-GGG-LAST";
print join(':', split(/G{2,}/,$string));
回报:
:-SOMETHING-ELSE-:-LAST
ŧ他使用的perl版本是:v5.10.1
您可以添加一些关于如何运行它的更多信息吗?
我将电脑切换到Ubuntu 11机器,您的单线以及我的技术工作正常。我认为这是我的Perl版本的一个神器。 – oiiio
只需'grep $ _,split/G {2,} /'可以正常工作。由于空字符串为假,因此无需对每个元素进行比较。 – Borodin