my $line = "file1.gz file2.gz file3.gz";
my @abc = split('',$line);
print "@abc\n";
预期输出:分割字符串转换成阵列在Perl
file1.gz
file2.gz
file3.gz
我想要的输出为file1.gz
在$abc[0]
,file2.gz in
$ ABC [1] , and
file3.gz in
$ ABC [2]` 。我如何拆分?
my $line = "file1.gz file2.gz file3.gz";
my @abc = split('',$line);
print "@abc\n";
预期输出:分割字符串转换成阵列在Perl
file1.gz
file2.gz
file3.gz
我想要的输出为file1.gz
在$abc[0]
,file2.gz in
$ ABC [1] , and
file3.gz in
$ ABC [2]` 。我如何拆分?
的开裂空白的字符串是非常简单的:
print $_, "\n" for split ' ', 'file1.gz file1.gz file3.gz';
这是split
实际上是一种特殊形式(如该功能通常需要的模式,而不是字符串):
作为另一个特例,
split
模仿PATTERN
要么省略当 命令行工具awk
的默认行为或文字串 单个空格字符组成的(如' '
或"\x20"
)。在这种情况下,在任何EXPR
前导空格是 除去发生之前分裂,并且PATTERN
代替视为 好像它是/\s+/
;特别是,这意味着任何连续的空白(不仅仅是一个空格字符)将用作分隔符。
这里的原始问题的答案(用一个简单的字符串,没有任何空格):
也许你想拆就.gz
扩展:
my $line = "file1.gzfile1.gzfile3.gz";
my @abc = split /(?<=\.gz)/, $line;
print $_, "\n" for @abc;
在这里,我用(?<=...)
构造,即look-behind assertion,基本上是在子行的前面加上.gz
子字符串中的每个点进行拆分。
如果用固定集扩展的工作,你可以扩展模式,包括他们所有:
my $line = "file1.gzfile2.txtfile2.gzfile3.xls";
my @exts = ('txt', 'xls', 'gz');
my $patt = join '|', map { '(?<=\.' . $_ . ')' } @exts;
my @abc = split /$patt/, $line;
print $_, "\n" for @abc;
有$line
,因为它是现在,你可以基于至少一个空白简单地分割字符串分离器
my @answer = split(' ', $line); # creates an @answer array
然后
print("@answer\n"); # print array on one line
或
print("$_\n") for (@answer); # print each element on one line
我更喜欢使用()
为split
,print
和for
。
只需使用/ \ s +/against''作为分隔符。在这种情况下,所有“额外”空白被删除。通常这种特殊行为是必需的。所以,在你的情况下它将会是:
my $line = "file1.gz file1.gz file3.gz";
my @abc = split(/\s+/, $line);
for my $i in (@abc) {
print "$i\n";
}
我发现这个很简单!
my $line = "file1.gz file2.gz file3.gz";
my @abc = ($line =~ /(\w+[.]\w+)/g);
print $abc[0],"\n";
print $abc[1],"\n";
print $abc[2],"\n";
输出:
file1.gz
file2.gz
file3.gz
下面一起来看看在本教程以了解更多关于Perl regular expression,向下滚动到更多匹配部分。
你好Rahul Reddy,
你已经有多个解答您的问题,但我想在这里补充另一个较小的一个,可能有助于补充一下。
要查看在Perl中你可以使用Data::Dumper并打印您可以使用say一串复杂的数据结构,它的每一个字符串,而不是做手工后增加了一个新的行字符(\n
)。
我通常使用(\s
)符合(一)个空白字符,如果添加(+
)它匹配一个或多个空格(\s+)
。你可以阅读更多关于它在这里perlre。的
样品代码:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use feature 'say';
my $line = "file1.gz file2.gz file3.gz";
my @abc = split /\s+/, $line;
print Dumper \@abc;
say for (@abc);
希望这有助于BR
好了,没有编程语言能读你的心'分裂“”'分裂成单个字符如果您所有的文件名以'˚F开始。 ile ...',然后'split /(?= file)/'可以工作,但是没有通用的解决方案 – amon
@aragaer您的评论实际上是错误的。 ['split'](http://perldoc.perl.org/functions/split.html)将参数作为模式,字符串,限制。你的订单是错误的。如果'$“eq”\ n“'('$”'通常是一个空格),'print'@abc \ n“'可以正常工作。 – amon