>我正在使用perl。
下面是 $match_name 的字符串:
|1015809840|ref|NG_009004.2|
|1015809841|ref|NG_009005.2|
我希望输出为:
1015809840
1015809841
我尝试:
$match_name =~ s/(.*?|.*?)|.*//g;
它会删除所有字符。
my ($second_field) = $row =~ /^ [^|]* | ( [^|]* ) |/x;
my $second_field = ( split(/|/, $row) )[1];
不过,最好使用Text::CSV_XS。
看起来您有固定宽度的数据。您当然可以使用正则表达式来处理固定宽度的数据,但我更喜欢pack
和unpack
:
use strict;
use warnings 'all';
use 5.010;
while (<DATA>) {
my @fields = unpack 'x A10 x A3 x A11';
say $fields[0];
}
__DATA__
|1015809840|ref|NG_009004.2|
|1015809841|ref|NG_009005.2|
输出:
1015809840
1015809841
unpack
模板x A10 x A3 x A11
意味着:
-
x
:跳过字符 -
A10
:在第一个字段中读取 10 个字符 -
x
:跳过一个字符 -
A3
:在第二个字段中读取 3 个字符 -
x
:跳过一个字符 -
A11
: 在第三个字段中读出 11 个字符
Perlpacktut 很好地介绍了如何使用固定宽度数据的pack
和unpack
。