我有一个字符串列表,我想搜索并忽略任何包含连续出现4次以上的A或G字符的字符串。例如,我想忽略TCAAAATC或GCTGGGGAA等字符串。
我试过了:
unless ($string =~ m/A{4,}?/g || m/G{4,}?/g)
{
Do something;
}
但是我收到一条错误消息“在模式匹配中使用未初始化的值(m //)".
任何建议都将不胜感激。
答案 0 :(得分:3)
您需要避免与$_
进行隐式比较,您可以通过编写来完成:
unless ($string =~ m/A{4}/ || $string =~ m/G{4}/)
这样可以在字符串中查找4个A或4个G;如果有4个,那么是否有超过4个并不重要。
您可以使用以下方法将其缩小为单个正则表达式:
unless ($string =~ m/([AG])\1{3}/)
查找A或G,后跟3个相同的字符。
答案 1 :(得分:3)
写作
|| m/G{4,}?/g
您正在针对此正则表达式隐式测试$_
。但是,$_
未初始化,因此您收到错误。
写
unless ($string =~ m/A{4}/ || $string =~ m/G{4}/)
代替(注意对正则表达式的简化),或者,作为单个表达式,
unless ($string =~ m/A{4}|G{4}/)