如何在Perl中将字母和数字分割成字符串?

Dre*_*ktz 2 perl split substitution lookahead lookbehind

使用split()分割字符串,并根据该字符串创建一个数组,以使单词和数字分开。

我知道前瞻和后瞻需要用于零宽度拆分,因此我使用了它。

$string = 'A1BB22CCC333DDDD';
@string = split(/(?=\d+)|(?<=\d+)/,$string);
print "@string";
Run Code Online (Sandbox Code Playgroud)

期望:

A 1 BB 22 CCC 333 DDDD
Run Code Online (Sandbox Code Playgroud)

但是结果:

在jdoodle.pl第2行的regex m /(?= \ d +)|(?<= \ d +)/中未实现可变长度后向。

命令以非零状态255退出。

GMB*_*GMB 5

您可以使用类似/(\d+)/拆分字符串的模式。

该模式包含一个捕获组;如perldoc split中所述

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

考虑:

use strict;
use warnings;
my $string = "A1BB22CCC333DDDD";
my @result = split /(\d+)/, $string;
print "$_\n" for @result;
Run Code Online (Sandbox Code Playgroud)

产量:

A
1
BB
22
CCC
333
DDDD
Run Code Online (Sandbox Code Playgroud)

如果字符串确实以数字开头,则上述解决方案将返回前导空元素。为避免这种情况,可以按如下所示修改表达式:

my @result = grep length, split /(\d+)/, $string;
Run Code Online (Sandbox Code Playgroud)