我有一个大文件,其中的行如下(标签分隔):
220995146 A G 1/1:8:0:0:8:301:-5,-2.40824,0 pass
221020849 G GGAGAGGCA 1/1:8:0:0:8:229:-5,-2.40824,0 pass
我试图写一个合法的状态,这样我就可以只保留第二列和第三列中只有一个字符的行。 例如,第二行不通过。 我正在使用的正则表达式是:
if (($ref =~ m/\w{1}/) && ($allele =~ m/\w{1}/)) {
print "$mline\n";
}
但不幸的是没有用。 有什么建议? 非常感谢你提前。
答案 0 :(得分:2)
我假设$allele
包含第三列。在您的代码$allele =~ m/\w{1}/
中,检查是否包含一个单词字符。相反,你想要匹配整个事情。您可以使用开始^
和$
结束匹配器执行此操作:
$allele =~ m/^\w{1}$/
或者只是
$allele =~ /^\w$/
答案 1 :(得分:2)
此处不需要正则表达式,您可以使用length函数:
if (length($ref) == 1 && length($allele) == 1) {
print $mline,"\n";
}
答案 2 :(得分:1)
如果您正在寻找纯正则表达式解决方案,请使用:
$re = m/^[^\t]+\t+\w\t+\w\t+.*$/ ;
这将匹配第2和第3列具有单个字符的行,在第2和第3个位置使用1个或多个制表符后使用\w
。