如何分割像“ aa132bc4253defg18 ”这样的字符串来获取一系列单词和数字:
答案 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;