Java 用正则表达式从FASTA中提取DNA

Java 用正则表达式从FASTA中提取DNA,java,regex,Java,Regex,我有一组DNA序列如下 >gi|58445847s cyclin-dependent kinase inhibitor 1B (p27, Kip1) (CDKN1B), mRNA ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA >gi|584458479:571-1167 Homo sapiens 1B (p27,

我有一组DNA序列如下

>gi|58445847s cyclin-dependent kinase inhibitor 1B (p27, Kip1) (CDKN1B), mRNA
ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC
GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA

>gi|584458479:571-1167 Homo sapiens 1B (p27, Kip1) (CDKN1B), mRNA
ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC
ACAAAAGAGCCAACAGAACAGAAGAAAATGTTTCAGACGGTTCCCCAAATGCCGGTTCTGTGGAGCAGAC
GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA
我只想提取
[ATGC]+
,应该忽略以
>
开头的行

这是我做的正则表达式

(?!\>.*\n)[ATGC\n]+
但它发现的第一组是
中的
C
(CDKN1B)
,然后从
中的A开始,mRNA
到下一个

更新
下面的Java代码可用于从文件中查找DNA序列。使用
findWithinHorizon(pattern,0)
代替
useDelimiter(patter)

List sequences=new ArrayList();
试一试{
s=新的扫描仪(新的BufferedReader(新的文件阅读器(fc.getSelectedFile()));
Pattern p=Pattern.compile(“^[ACTG]+(?:\\r\\n[ACTG]+)*”,Pattern.MULTILINE);
字符串str=s.findWithinHorizon(p,0);
做{
序列。添加(str);
str=s.findWithinHorizon(p,0);
}while(str!=null);
}catch(filenotfounde异常){
System.out.println(e.getMessage());
}最后{
如果(s!=null){
s、 close();
}
}

您需要在开头添加
^
。以便检查整行是否与断言中给出的条件匹配

^(?!>.*\n)[ATGC\n]+


您需要在开头添加
^
。以便检查整行是否与断言中给出的条件匹配

^(?!>.*\n)[ATGC\n]+


您需要在开头添加
^
。以便检查整行是否与断言中给出的条件匹配

^(?!>.*\n)[ATGC\n]+


您需要在开头添加
^
。以便检查整行是否与断言中给出的条件匹配

^(?!>.*\n)[ATGC\n]+

简单地试试这个,抓住第一组。见演示

简单地试试这个,抓住第一组。见演示

简单地试试这个,抓住第一组。见演示

简单地试试这个,抓住第一组。见演示


使用锚点作为线的起点和多线修改器:

(?m)^[ACTG\n]+
前瞻是无用的

或者,如果要修剪最后一个换行符:

(?m)^[ACTG]+(?:\n[ACTG]+)*
使用java.util.scanner的示例如下:

String input = ">gi|58445847s cyclin-dependent kinase inhibitor 1B (p27, Kip1) (CDKN1B), mRNA\n"
             + "ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC\n"
             + "GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA\n"
             + "\n"
             + ">gi|584458479:571-1167 Homo sapiens 1B (p27, Kip1) (CDKN1B), mRNA\n"
             + "ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC\n"                   
             + "ACAAAAGAGCCAACAGAACAGAAGAAAATGTTTCAGACGGTTCCCCAAATGCCGGTTCTGTGGAGCAGAC\n"
             + "GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA\n";

Pattern p = Pattern.compile("^[ACTG]+(?:\\n[ACTG]+)*$", Pattern.MULTILINE);

Scanner s = new Scanner(input);
s.useDelimiter("\n");   

while(s.hasNext()) {
    System.out.println(s.findWithinHorizon(p, 0) + "\n");
}

将锚点用于线的起点和多线修改器:

(?m)^[ACTG\n]+
前瞻是无用的

或者,如果要修剪最后一个换行符:

(?m)^[ACTG]+(?:\n[ACTG]+)*
使用java.util.scanner的示例如下:

String input = ">gi|58445847s cyclin-dependent kinase inhibitor 1B (p27, Kip1) (CDKN1B), mRNA\n"
             + "ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC\n"
             + "GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA\n"
             + "\n"
             + ">gi|584458479:571-1167 Homo sapiens 1B (p27, Kip1) (CDKN1B), mRNA\n"
             + "ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC\n"                   
             + "ACAAAAGAGCCAACAGAACAGAAGAAAATGTTTCAGACGGTTCCCCAAATGCCGGTTCTGTGGAGCAGAC\n"
             + "GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA\n";

Pattern p = Pattern.compile("^[ACTG]+(?:\\n[ACTG]+)*$", Pattern.MULTILINE);

Scanner s = new Scanner(input);
s.useDelimiter("\n");   

while(s.hasNext()) {
    System.out.println(s.findWithinHorizon(p, 0) + "\n");
}

将锚点用于线的起点和多线修改器:

(?m)^[ACTG\n]+
前瞻是无用的

或者,如果要修剪最后一个换行符:

(?m)^[ACTG]+(?:\n[ACTG]+)*
使用java.util.scanner的示例如下:

String input = ">gi|58445847s cyclin-dependent kinase inhibitor 1B (p27, Kip1) (CDKN1B), mRNA\n"
             + "ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC\n"
             + "GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA\n"
             + "\n"
             + ">gi|584458479:571-1167 Homo sapiens 1B (p27, Kip1) (CDKN1B), mRNA\n"
             + "ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC\n"                   
             + "ACAAAAGAGCCAACAGAACAGAAGAAAATGTTTCAGACGGTTCCCCAAATGCCGGTTCTGTGGAGCAGAC\n"
             + "GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA\n";

Pattern p = Pattern.compile("^[ACTG]+(?:\\n[ACTG]+)*$", Pattern.MULTILINE);

Scanner s = new Scanner(input);
s.useDelimiter("\n");   

while(s.hasNext()) {
    System.out.println(s.findWithinHorizon(p, 0) + "\n");
}

将锚点用于线的起点和多线修改器:

(?m)^[ACTG\n]+
前瞻是无用的

或者,如果要修剪最后一个换行符:

(?m)^[ACTG]+(?:\n[ACTG]+)*
使用java.util.scanner的示例如下:

String input = ">gi|58445847s cyclin-dependent kinase inhibitor 1B (p27, Kip1) (CDKN1B), mRNA\n"
             + "ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC\n"
             + "GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA\n"
             + "\n"
             + ">gi|584458479:571-1167 Homo sapiens 1B (p27, Kip1) (CDKN1B), mRNA\n"
             + "ATGTCAAACGTGCGAGTGTCTAACGGGAGCCCTAGCCTGGAGCGGATGGACGCCAGGCAGGCGGAGCACC\n"                   
             + "ACAAAAGAGCCAACAGAACAGAAGAAAATGTTTCAGACGGTTCCCCAAATGCCGGTTCTGTGGAGCAGAC\n"
             + "GCCCAAGAAGCCTGGCCTCAGAAGACGTCAAACGTAA\n";

Pattern p = Pattern.compile("^[ACTG]+(?:\\n[ACTG]+)*$", Pattern.MULTILINE);

Scanner s = new Scanner(input);
s.useDelimiter("\n");   

while(s.hasNext()) {
    System.out.println(s.findWithinHorizon(p, 0) + "\n");
}


您的正则表达式需要一个多行标志。您忘记添加了吗?每当在正则表达式中使用锚点时,添加多行修饰符。正则表达式需要多行标志。您忘记添加了吗?每当在正则表达式中使用锚点时,添加多行修饰符。正则表达式需要多行标志。您忘记添加了吗?每当在正则表达式中使用锚点时,添加多行修饰符。正则表达式需要多行标志。您忘记添加了吗?每当在正则表达式中使用锚点时,添加多行修饰符。效果很好。唯一需要注意的是偶数组号。@LifeH2O
group1
group2
等将是您的答案,即使是单数也不行。唯一需要注意的是偶数组号。@LifeH2O
group1
group2
等将是您的答案,即使是单数也不行。唯一需要注意的是偶数组号。@LifeH2O
group1
group2
等将是您的答案,即使是单数也不行。唯一的捕获是偶数组号。@LifeH2O
group 1
第2组
等将是您的答案,即使是在java中毫不费力地安装的答案也不例外。它不会用
扫描仪提供正确的输出。用java中毫不费力地安装的useDelimiter
不会提供正确的输出。用java中毫不费力地安装的useDelimiter不会提供正确的输出
Scanner.useDelimiter
在java中轻松安装。它不能通过
Scanner.useDelimiter