#!/usr/bin/perl
use strict;
use warnings;
my $del1 = "[";
my $del2 = "]";
sub rings($){
my ($line) = $_;
my @lineArr = split(" ", $line);
my $noSquareBrackets = $lineArr[0];
$noSquareBrackets =~ s/[^$del1[^$del1$del2]*$del2$]//g;
print "check: ", $noSquareBrackets, "\n";
}
$/ = "\n>";
while(<>){
/([^>]*)/;
my $seq = $1;
$seq =~s/\s//g;
$seq = rings($seq);
}
删除正则表达式之前的打印与以前完全相同。有没有人注意到,为什么只有一个(第一个)文件行被打印出来,当我的.inp格式文件有很多行?
输入文件包含以下行:
line 1) c1(ccc(cc1)N)S(=O)(=O)[O-].c1(ccc(cc1)C)[NH3+] 1519987
line 2) [Ce]123456([O]7[Cu]89[N](=Cc%10c7c([O]5CC)ccc%10)CC[N]8=Cc5cccc(c5[O]19)[O]2CC)(ON(=O)=[O]6)(ON(=[O]4)=O)[O]=N(=O)O3 1100946
我想用括号
删除方括号中的所有数据答案 0 :(得分:1)
注意代码中的行$/ = "\n>";
。
它设置记录分隔符的内容(字符序列处理的内容)
作为输入行的结尾)。
如您所见,它包含换行符,后跟>
。
现在看看你的输入。在任何新行之后都可以找到任何>
。
结果是您的代码首先读取整个输入文件
输入行。
可能的解决方案是:
>
,但第一行。$/ = "\n>";
指令,保留默认记录saparator
为"\n"
。请记住,例如正则表达式中的[
和]
具有特殊含义。
如果你想“按字面意思”使用它们,你必须用反斜杠来逃避它们。
另一个评论是,在“打开”[
之后,你应该匹配一个序列
字符不仅仅与]
不同。
所以消除[...]
的正则表达式应该是:
s/\[[^\]]*\]//g