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