正则表达式核苷酸搜索



我正试图找到一个正则表达式,让我知道是否有一个二核苷酸(两个字母(在我的序列中连续出现两次。我举一个例子:

假设我有这个序列(字符;是为了表明我说的是二核苷酸(:

"AT;GC;TA;CC;AG;AG;CC;CA;TA;TA"

我期望的结果是它与模式AGAGTATA相匹配。

我已经尝试过了,但它失败了,因为它给了我任何一对二核苷酸,而不是同一对:

([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

最新更新