Java 将不同的模式匹配到字符串
(这是一个后续问题) 所以我有一条DNA链 e、 g 我有20个不同的3字母模式(每个组合对应一个氨基酸),我想与数据匹配。我的java程序一次查看3个字母,并尝试将其与其中一个模式匹配。我想最终计算每个氨基酸出现的次数,所以当我找到匹配项时,我需要增加一个特定的计数器。我想使用java正则表达式实现这一点,因此我有:Java 将不同的模式匹配到字符串,java,regex,pattern-matching,Java,Regex,Pattern Matching,(这是一个后续问题) 所以我有一条DNA链 e、 g 我有20个不同的3字母模式(每个组合对应一个氨基酸),我想与数据匹配。我的java程序一次查看3个字母,并尝试将其与其中一个模式匹配。我想最终计算每个氨基酸出现的次数,所以当我找到匹配项时,我需要增加一个特定的计数器。我想使用java正则表达式实现这一点,因此我有: Pattern A = Pattern.compile("(gct)|(gcc)|(gca)|(gcg)"); Pattern C = Pattern.compile("(tgt
Pattern A = Pattern.compile("(gct)|(gcc)|(gca)|(gcg)");
Pattern C = Pattern.compile("(tgt) | (tgc)");
Pattern D = Pattern.compile("(gat) | (gac)");
等等
然而,我现在意识到,您需要为每个模式创建一个匹配器,而不能使用一个匹配器来搜索所有模式;对于我来说,实现我所要做的事情的最佳方式是什么 对正则表达式进行因式分解:
(gc[tcag]|(tg|ga)[tc])
我不会在这里使用正则表达式。您有四个字母,因此
4^3=64
可能是三元组。只需在字符串上循环,将每个三元组转换为它的数字(a->0,c->1,g->2,t->3
,因此gcc->2*4^2+1*4^0=37
),递增计数器[数字]
,并忽略结尾不需要的数字。(如果您还需要位置,在插入到适当的列表中以节省空间之前,可能需要检查当前三元组是否是所需的位置之一。)尝试一下
String dna = "acagatgaaggaggacgcgcccccgccgctgtcctgcgcctcagccatcctatgagacgg";
Pattern p = Pattern.compile("(gct)|(gcc)|(gca)|(gcg)");
Matcher m = p.matcher(dna);
int count = 0;
while(m.find()) {
count ++;
}
您可以使用如下表达式
(?<gc>gc[tcag])|(?<tg>tg[tc])|(?<ga>ga[tc])
(?gc[tcag])|(?tg[tc])|(?ga[tc]))
但是,不能对字符串使用正则表达式。它会给你很多误报
字符串中唯一有效的氨基是GAT GCC和GCT,如果对字符串使用正则表达式,最多可以找到11个结果
因此,首先需要将字符串分成3个字符组,然后使用正则表达式将模式与之匹配
试试正则表达式:
(?<gc>gc(?=[tcag]))|(?<tg>tg(?=[tc]))|(?<ga>ga(?=[tc]))
(?gc(?=[tcag]))|(?tg(?=[tc]))|(?ga(?=[tc]))
根据你的字符串,它将产生11个结果。不是你想要的
小心你想要的,你可能会得到的。(或者比你想要的多得多)
Dim dna As String=“acagagagagacgcccgccgcctgtcctgcgccctcagcccatcctatgagacgg”
作为新ArrayList的Dim图案
对于x=0到dna。长度-1步骤3
Dim match As match=Regex.match(dna.Substring(x,3),“(?gc[tcag])|(?tg[tc])|(?ga[tc])”)
如果匹配,那么成功
pattern.Add(match.Value)
如果结束
下一个
这将给你4个结果
服
-海湾合作委员会
-海湾合作委员会
-gct
匹配所有3个有效的氨基值您知道字符串中的边界在哪里吗?是每三个字母吗?如果你不知道,我认为正则表达式会因为一些模式会重叠而变得复杂。例如,从上面字符串的第17个字符开始,有“gcgcc”-这将匹配从第一个位置开始的“gcg”,但也将匹配从第三个位置开始的“gcc”。这些匹配项共享字符串中的第二个g,所以我怀疑这是否真的意味着在这些位置上有两种不同的酸。user1058210,让这些人做你的GC04课程作业真的不酷,你真的应该自己做。和平!
(?<gc>gc(?=[tcag]))|(?<tg>tg(?=[tc]))|(?<ga>ga(?=[tc]))
Dim dna As String = "acagatgaaggaggacgcgcccccgccgctgtcctgcgcctcagccatcctatgagacgg"
Dim pattern As New ArrayList
For x = 0 To dna.Length - 1 Step 3
Dim match As Match = Regex.Match(dna.Substring(x, 3), "(?<gc>gc[tcag])|(?<tg>tg[tc])|(?<ga>ga[tc])")
If match.Success Then
pattern.Add(match.Value)
End If
Next