2

我正在处理科学格式的一串数字。例如

24  6.924E+06  8.316E-01  1.052E-01  1.622E+01  1.311E+01  0.000E+00  6.059E-06 (snip.. extends for a bit)

现在我想为 perl 编写一个正则表达式,它允许我捕获列表中的第 i 个值。所以我目前的设置如下

$_ =~ ^\s+\d+\s+(\d+[.]\d+E[+]\d+);
my $temp = $1;

这会给我第一个号码。如果我愿意,我希望能够捕获第 7 个或第 50 个,而不必编写非常长的正则表达式。

有没有一种简洁的方法来做到这一点?

提前致谢。

4

3 回答 3

6

利用split

my @cols = split ' ', $_;

my $seventh = $cols[6];
my $fiftieth = $cols[49];
于 2014-07-18T21:21:11.873 回答
2

split 是这种情况下的最佳选择。

my @val = split ' ', $_;
my $val7 = $val[6];
于 2014-07-19T07:38:54.447 回答
0

第三个数字的示例:

^\s+\d+(?:\s+(\d+\.\d+E[-+]?\d+)){3}

当您重复捕获组时,内容将被最后一个匹配项覆盖。

注意:在这种情况下,使用它更干净[0-9]\d因为您只需要阿拉伯数字。

于 2014-07-18T21:30:37.693 回答