Java 正则表达式以“开头;ATG“;以“结束”;标签,TAA orTGA";但不包含;ATG“;及;标签、TAA或TGA“;中间
我正在搜索字符串中的模式,以Java 正则表达式以“开头;ATG“;以“结束”;标签,TAA orTGA";但不包含;ATG“;及;标签、TAA或TGA“;中间,java,regex,Java,Regex,我正在搜索字符串中的模式,以ATG开始,以TAG、TAA或TGA结尾,长度=3的倍数ATG和标签、TAA或TGA只能分别出现在开头或结尾。这意味着: 从atgttgtextractatgttga 从atgatgttgtextractatgttga 目前我使用的是regex(ATG)([ATG]{3})+?(TAG | TAA | TGA) 对于atgatgttgt这会得到错误的结果atgatgttga。 我试过: (^ATG)(!?=.*ATG)([ATG]{3})+?(TAG|TAA|TGA)
ATG
开始,以TAG、TAA或TGA结尾,长度=3的倍数ATG
和标签、TAA或TGA
只能分别出现在开头或结尾。这意味着:
从atgttgt
extractatgttga
从atgatgttgt
extractatgttga
目前我使用的是regex(ATG)([ATG]{3})+?(TAG | TAA | TGA)
对于atgatgttgt
这会得到错误的结果atgatgttga
。
我试过:
(^ATG)(!?=.*ATG)([ATG]{3})+?(TAG|TAA|TGA)
(^ATG)(!?=(ATG)+)([ATG]{3})+?(TAG|TAA|TGA)
如何告诉它在开始时只包含一次ATG,之后不再包含?您可以使用
ATG(?:(?!ATG)[ATG]{3})*?(?:TAG|TAA|TGA)
见
详细信息
ATG
-一个ATG
子字符串
(?:(?!ATG)[ATG]{3})*?
-与[ATG]
字符集中的3个字符的任意序列相匹配,但不等于ATG
(受(?!ATG)
限制)
(?:TAG | TAA | TGA)
-标签
、TAA
或TGA
中定义的三种备选方案之一
:
结果:
ATGTTGTGA
ATGTTGTGA
ATGTTGTGA
您的第一个示例似乎与您的描述不匹配:它没有以标记| TAA | TGA结尾?这在regexp中是不可能的。你可以对不是第一个或最后一个的ATG进行否定搜索,并否定这个结果。试试@Ward:I修改了这个问题。希望现在更清楚了。@WiktorStribiżew:这正是我在问题中想要的
ATGTTGTGA
ATGTTGTGA
ATGTTGTGA