正则表达式以删除行中的空格并提取特定列

时间:2012-08-28 07:38:27

标签: regex perl

Perl正则表达式,用于删除行中的空格并提取特定列

我的行看起来像这样:

324446  psharma jobA      2       0       435529  0       0       0     435531

在这里,我可以使用split函数拆分行,然后使用以下命令将值保存在数组中

@strings = split(/\s+/);

我不想要额外的变量。 使用正则表达式我想将第1,2,3列中的值提取为$1$2$3$10

1 个答案:

答案 0 :(得分:4)

欢迎来到stackexchange。

不需要额外的变量:

use strict;
use warnings;

my $line = '  324446   psharma jobA 2   0 435529 0 0 0 435531     ';

# Remove leading and trailing white space
$line =~ s/^ \s+ | \s+ $//x;
# Split by consecutive white space and keep certain fields:
my ($col1, $col2, $col3, $col10) = (split m/\s+/, $line)[0, 1, 2, 9];

print "1: $col1 2: $col2 3: $col3 10: $col10\n";

输出:

1: 324446 2: psharma 3: jobA 10: 435531

意味着即使使用split,您也不需要任何额外的变量。例如,如果您只想将这些字段传递给另一个函数,则您的分割线将如下所示:

some_func((split m/\s+/, $line)[0, 1, 2, 9]);

请注意,我假设您的列号计数从1开始而不是0(意味着您的“第1列”是数字“324446”等)。这就是我在我的例子中命名变量的方式。