Perl 获取文件中特定字符串的每个实例后面的7个字符
我正在寻找一种方法来获取文件中单词Perl 获取文件中特定字符串的每个实例后面的7个字符,perl,Perl,我正在寻找一种方法来获取文件中单词“ISBN=“”的每个实例后面的7个字符。文件中每行有一个ISBN= 所以有点像 my @data = (); my $word = "ISBN="; foreach my $line (@file) { if (index($line, $word) ge 0) { my $d = next seven characters; push (@data, $d); } } 我不知道…听起来像正则表达式,捕获会更
“ISBN=“
”的每个实例后面的7个字符。文件中每行有一个ISBN=
所以有点像
my @data = ();
my $word = "ISBN=";
foreach my $line (@file) {
if (index($line, $word) ge 0) {
my $d = next seven characters;
push (@data, $d);
}
}
我不知道…听起来像正则表达式,捕获会更容易:
if ($line =~ /ISBN=(.{7})/) {
push @data, $1;
}
听起来像是正则表达式,捕获会更容易:
if ($line =~ /ISBN=(.{7})/) {
push @data, $1;
}
要从字符串中的已知索引中获取固定数量的字符,请使用以下函数:
my $d = substr $line, index($line, $word) + length($word), 7;
要从字符串中的已知索引中获取固定数量的字符,请使用以下函数:
my $d = substr $line, index($line, $word) + length($word), 7;
您应该使用
while()
来迭代文件,而不是将其拖入数组。您应该使用while()
来迭代文件,而不是将其拖入数组。我认为正则表达式需要g修饰符。看看perldoc.perl.org上的perlreftut@EricJablow你为什么这么认为?@EricJablow不,我想我们不用多次匹配就可以处理得很好。特别是因为OP说每行只有一个ISBN=
字符串。您正在使用$word
它应该位于$line
的位置$word
包含我们正在查找的前缀。我认为正则表达式需要g修饰符。看看perldoc.perl.org上的perlreftut@EricJablow你为什么这么认为?@EricJablow不,我想我们不用多次匹配就可以处理得很好。特别是因为OP说每行只有一个ISBN=
字符串。您正在使用$word
它应该位于$line
的位置$word
包含我们要查找的前缀。谢谢,这正是我要查找的前缀@TLP,Barmar是对的,应该使用$line而不是$word。但我并没有使用特别有启发性的字符串名称……谢谢,这正是我想要的@TLP,Barmar是对的,应该使用$line而不是$word。但我没有使用特别有启发性的字符串名称。。。