Java 用正则表达式从FASTA中提取DNA
我有一组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,
>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
等将是您的答案,即使是单数也不行。唯一需要注意的是偶数组号。@LifeH2Ogroup1
,group2
等将是您的答案,即使是单数也不行。唯一需要注意的是偶数组号。@LifeH2Ogroup1
,group2
等将是您的答案,即使是单数也不行。唯一的捕获是偶数组号。@LifeH2Ogroup 1
,第2组
等将是您的答案,即使是在java中毫不费力地安装的答案也不例外。它不会用扫描仪提供正确的输出。用java中毫不费力地安装的useDelimiter
不会提供正确的输出。用java中毫不费力地安装的useDelimiter不会提供正确的输出Scanner.useDelimiter
在java中轻松安装。它不能通过Scanner.useDelimiter