Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式以“开头;ATG“;以“结束”;标签,TAA orTGA";但不包含;ATG“;及;标签、TAA或TGA“;中间_Java_Regex - Fatal编程技术网

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
extract
atgttga

atgatgttgt
extract
atgttga

目前我使用的是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