我有一个输入变量,比如$a
。 $a
可以是数字或字符串,也可以是两者的混合。
我的问题是如何剥离变量以分隔数字和字母字符?
实施例
$a can be 'AB9'
在这里,我应该能够将'AB'存储在一个变量中,将'9'存储在另一个变量中。
我该怎么做?
答案 0 :(得分:4)
检查此版本,它适用于变量中的1个或多个数字和字母字符。
#!/usr/bin/perl
use strict;
use Data::Dumper;
my $var = '11a';
my (@digits, @alphabetics);
while ($var =~ /([a-zA-Z]+)/g) {
push @alphabetics, $1;
}
while ($var =~ /(\d+)/g) {
push @digits, $1;
}
print Dumper(\@alphabetics);
print Dumper(\@digits);
答案 1 :(得分:3)
这是一种很快表达出来的方式:
my ($digits) = $input =~ /(\d+)/;
my ($alpha) = $input =~ /([a-z]+)/i;
say 'digits: ' . ($digits // 'none');
say 'non-digits: ' . ($alpha // 'none');
在此处使用列表上下文中的匹配运算符非常重要,否则如果匹配成功则会返回。
如果要在输入字符串中获取所有次出现,只需将列表上下文中的标量变量更改为正确的数组:
my @digits = $input =~ /(\d+)/g;
my @alpha = $input =~ /([a-z]+)/gi;
say 'digits: ' . join ', ' => @digits;
say 'non-digits: ' . join ', ' => @alpha;
对于my $input = '42AB17C'
,输出为
digits: 42, 17
non-digits: AB, C