所以我是一个巨大的 perl 新手,但我正在尝试将制表符分隔的文件解析为数组。我遇到的唯一问题是我的文件有不同数量的用于间距的制表符。
现在我正在做 @data = split("\t");
,但这只会删除一个选项卡,有没有办法在解析文件时删除所有选项卡?
您可以拆分正则表达式,因此如果您需要拆分一个或多个制表符,请使用:
@data = split("\t+");
示例(Perl 调试器):
DB<1> $text = "one\ttwo\t\tthree\t\t\tfour"
DB<2> @data = split("\t+", $text)
DB<3> print join(", ", @data)
one, two, three, four
只需在 split() 之前用整个字符串中的单个选项卡替换多个选项卡
# A line with varying numbers of tabs
my $line="\t\tField1\tField2\t\t\t\t\tField3";
# Replace all occurences of one or more tabs with single tab
$line =~ s/\t+/\t/g;
# Now split()
你可以这样走
#!/usr/bin/perl
use strict;
use warnings;
open (IN, '<' , 'tabsfile');
my @arr;
while(<IN>) {
$_ =~ s/\s+/ /g;
push @arr, $_;
}
close(IN);
输出:
]# cat tabsfile
lkjdlksajdlkajsd kdjlkasjd ;lkwqd;wqd;qwkd;qwkd
lkewjflkjewflewjflwjf lkewjflkejflewjf
djflkajfdljf eljfdlewfjlewfj lkfjewlfkjewlkf lkdjewflkjewlkfjlkewjfew dlkejfdlkjewflkjewlkfjjdlkajdflkjalfdjelfj
dkjklfjldskjfldsjf lkjdslkfjdslkjf:wq
]# perl tabs.pl
lkjdlksajdlkajsd kdjlkasjd ;lkwqd;wqd;qwkd;qwkd lkewjflkjewflewjflwjf lkewjflkejflewjf djflkajfdljf eljfdlewfjlewfj lkfjewlfkjewlkf lkdjewflkjewlkfjlkewjfew dlkejfdlkjewflkjewlkfjjdlkajdflkjalfdjelfj dkjklfjldskjfldsjf lkjdslkfjdslkjf:wq
]#
您可以在正则表达式中选择要替换\t
\s
的内容。