剥离perl中的数字和字母

时间:2012-10-30 09:26:08

标签: perl

我有一个输入变量,比如$a$a可以是数字或字符串,也可以是两者的混合。

我的问题是如何剥离变量以分隔数字和字母字符?

实施例

$a can be 'AB9'

在这里,我应该能够将'AB'存储在一个变量中,将'9'存储在另一个变量中。

我该怎么做?

2 个答案:

答案 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