一个唯一字符的正则表达式

时间:2015-07-03 07:49:09

标签: regex string perl

我有一个大文件,其中的行如下(标签分隔):

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";
    }

但不幸的是没有用。 有什么建议? 非常感谢你提前。

3 个答案:

答案 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+.*$/ ;

RegEx Demo

这将匹配第2和第3列具有单个字符的行,在第2和第3个位置使用1个或多个制表符后使用\w