所以我是一个巨大的perl新手,但我正在尝试将制表符分隔文件解析为数组。 我唯一的问题是我的文件有不同数量的标签用于间距。
现在我正在做@data = split("\t");
,但这只删除了一个标签,有没有办法在解析文件时删除所有标签?
答案 0 :(得分:3)
您可以拆分正则表达式,因此如果您需要拆分一个或多个标签字符,请使用:
@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
答案 1 :(得分:2)
在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()
答案 2 :(得分:0)
你可以这样做
#!/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
的内容。