Perl正则表达式从点分隔整数的字符串中提取数字组

时间:2014-08-01 10:58:12

标签: regex perl

首先,我正在使用Perl 5.14.1。

在以下问题上我一直在拔头发(注意:我绝对吮吸与正则表达式有关)。我正在寻找一个正则表达式,只从字符串中提取数字,如下所示:

E4.1
E6
e16
e6.7.3
E42.9

基本上,总是有一个e(大写或小写),后跟至少一组数字。如果有多组数字,则它们用点分隔。我想要做的是将所有数字组提取到一个数组中。例如:

E4.1 -> ( 4, 1 )
E65 -> ( 65 )
e5.8.3 -> ( 5, 8, 3 )

其中括号中的东西应该是我从字符串中提取的数字数组。

到目前为止我得到的是

my @groupsOfNumbers = ( $inputString =~ /(\d+)((\.)\d+)*/g );

我的理由是,总是至少有一组数字(因此第一个(\ d +)),可选地后跟任意数量的点后跟数字分组(因此((。)\ d +)* 部分)。不幸的是,这似乎不起作用。例如,如果我将该正则表达式应用于此输入:

E4.3.1

结果是:

(“4”,“。1”,“。”)

请帮忙!

1 个答案:

答案 0 :(得分:4)

您不必为点匹配而烦恼,因为您只想要数字,

my @groupsOfNumbers = $inputString =~ /(\d+)/g;