R语言如何用正则匹配含连续重复元素的数据行?
问题解决
你的正则表达式逻辑错了——TCG{5, }的意思是匹配TC后面跟至少5个G,不是TCG整个序列重复5次,这就是为啥所有带TCG的行都被命中了(只要有TC加1个G就符合条件)。
要匹配TCG连续重复至少5次,得把TCG用括号包成一个整体,再给这个整体加重复量词:
which(grepl(x = df$Sequence, pattern = "(TCG){5,}"))
这里的(TCG)把三个字符定义成一个分组,{5,}表示这个分组要连续出现至少5次,刚好对应你要找的第4行的TCGTCGTCGTCGTCG。
额外提个小细节:{5,}后面别加空格,你原来写的{5, }里的空格会被当成要匹配的字符,反而会匹配不到目标序列。
如果不想保存分组内容(只是用来重复),可以用非捕获分组(?:TCG){5,},效果一样,效率略高一点:
which(grepl(x = df$Sequence, pattern = "(?:TCG){5,}"))
内容的提问来源于stack exchange,提问作者ginn
相关产品推荐
相关产品推荐

