我正试图找到一个正则表达式,让我知道是否有一个二核苷酸(两个字母(在我的序列中连续出现两次。我举一个例子:
假设我有这个序列(字符;
是为了表明我说的是二核苷酸(:
"AT;GC;TA;CC;AG;AG;CC;CA;TA;TA"
我期望的结果是它与模式AGAG
和TATA
相匹配。
我已经尝试过了,但它失败了,因为它给了我任何一对二核苷酸,而不是同一对:
([ATGC]{2}){2}
您将需要使用backreferences。
从匹配一对开始:
[ATGC]{2}
将匹配四个字母中任意一对的两个。
您需要将其放在捕获圆括号中,并使用1
引用圆括号的内容,如下所示:
([ATGC]{2});1
假设字符串是
"TA;TA;GC;TA;CC;AG;AG;CC;CA;TA;TA"
^^ ^^ ^^ ^^ ^^ ^^
如果你想匹配两次"TA"
(和一次"AG"
(,你可以应用@Andy的解决方案。
如果只想匹配"TA"
一次,那么无论字符串中"TA;TA"
的实例数量如何,都可以匹配
([ATGC]{2});1(?!.*1;1)
并且检索捕获组1的内容。
演示
这个表达式可以分解如下。
([ATGC]{2}) # match two characters, each from the character class,
# and save to capture group 1
;1 # match ';' followed by the content of capture group 1
(?! # begin a negative lookahead
.* # match zero or more characters
1;1 # match the content of capture group 1 followed by ';'
# followed by the content of capture group 1
) # end negative lookahead