【发布时间】:2013-08-06 05:07:07
【问题描述】:
我是 Perl 的初学者,有一段数据如下:
ATOM 2067 N SER 7 316 -2.78500 -0.14800 -0.01300 N_R 3 0 -0.47000 0 0
ATOM 2068 HN SER 7 316 -2.51586 0.06218 0.89490 H___A 1 0 0.31000 0 0
ATOM 2069 CA SER 7 316 -3.57800 -1.36200 -0.28500 C_3 4 0 0.07000 0 0
我希望能够将每行中没有 H_ 的数据打印到另一个文件行。您能帮我找出正则表达式中的错误吗?
while (<localBGF>)
{
$line = $_;
if ($line =~ /^ATOM\s+\d+\s+(\S+)\s+SER/)
{
if ($line !~ /^ATOM\s+\d+\s+(\S+)\s+SER\s+\d\s+\d\s+\d\s+\d\s+\d\s+H_/)
{
print BGF $line;
}
}
}
【问题讨论】:
-
为什么不直接做
$line =~ s/H_//g;? -
另外,您使用的是
strict和warnings,对? -
@JackManey:我想他想检查行首:
ATOM 1234... -
当一行包含
H__时,第三个字段是否也包含H(当且仅当)? -
错误是你在一些
\d之后缺少+,而且\d匹配数字0-9所以\d+不会匹配-0.01300,因为它没有t 匹配-或.。