使用Perl将字符串拆分为单词和数字的数组

时间:2015-01-06 12:09:00

标签: perl split

如何分割像“ aa132bc4253defg18 ”这样的字符串来获取一系列单词和数字:

  • AA,132,BC,4253,DEFG,18
我正在使用Perl。子字符串的长度是可变的。

2 个答案:

答案 0 :(得分:2)

怎么样:

use Modern::Perl;
use Data::Dump qw(dump);

my $str = "aa132bc4253defg18";
my @l = split(/(?<=\d)(?=\D)|(?<=\D)(?=\d)/, $str);
dump@l;

<强>输出:

("aa", 132, "bc", 4253, "defg", 18)

它按顺序在数字\d和非数字\D之间拆分。

答案 1 :(得分:1)

这样的事情会:

split (/(\d+)/, $x);

完整的工作示例:

use strict; use warnings;

my $x = 'aa132bc4253defg18';

my @y = split /(\d+)/, $x;

print join ",", @y;

perldoc split中的重要部分是:

  

EXPR中与PATTERN匹配的任何内容都被视为将EXPR分隔为不包含分隔符的子字符串(称为“字段”)的分隔符。

  

如果PATTERN包含捕获组,则对于每个分隔符,将为组捕获的每个子字符串生成一个附加字段(按照指定组的顺序,根据后向引用);

修改

如果字符串以数字开头,split将返回一个空元素。这些可以用grep

来表达
grep {$_} split /(\d+)/, $x;

示例变为

use strict; use warnings;

my $x = '44aa132bc4253defg18';

my @y = grep {$_} split /(\d+)/, $x;

print join ",", @y;