我想要搜索特定的(DNA)字符串'AGCTAGCT'并允许发生一个(且只有一个)不匹配(表示为'N' )。正则表达式:允许多达一次出现某个字符
以下是比赛(没有或一个N):
AGCTAGCT
NGCTAGCT
AGCNAGCT
以下是不匹配(两个或两个以上NS):
AGNTAGCN
AGNTANCN
我想要搜索特定的(DNA)字符串'AGCTAGCT'并允许发生一个(且只有一个)不匹配(表示为'N' )。正则表达式:允许多达一次出现某个字符
以下是比赛(没有或一个N):
AGCTAGCT
NGCTAGCT
AGCNAGCT
以下是不匹配(两个或两个以上NS):
AGNTAGCN
AGNTANCN
在任何语言中,你可以做这样的事情
var count = str.match(/N/g).length; // just count the number of N in the string
if(count == 1 || count == 0) { // and compare it
// str valid
}
如果你只想要一个正则表达式,你可以使用这个表达式
/^[^N]*N?[^N]*$/
您可以测试字符串是否与上述正则表达式匹配。
如果你正在使用python,你可以把它无需正则表达式:
myList = []
for word in dna :
if word.count('N') < 2 :
myList.append(word)
而现在,如果你想生成所有的DNA,我不知道DNA是如何发生的信件,但是这可以为您节省:
import itertools
letters = ['A', 'G', 'C', 'T', 'N']
for letter in itertools.permutations(letters):
print ''.join(letter)
然后,您将拥有四个字母中的所有排列组合。
我不明白你如何接受'AGCTAGCT',最多只有一个N. – 1010 2014-12-13 02:48:33
'word.count('N')<2'可以是'一个N或不是N' – Abdelouahab 2014-12-13 02:49:50
他只想要'AGCTAGCT',而不是'AGCTAGCT'任何一个字符串中最多一个N. – 1010 2014-12-13 02:50:50
在开始时使用反向查找来检查字符串是否包含两个N
's或不是。
^(?!.*?N.*N)[AGCTN]{8}$
我假设你的字符串只包含A
,G
,C
,T
,N
字母。
^(?!.*?N.*N)[AGCTN]+$
或者干脆这样,
^(?!.*?N.*N).+$
再一次,这是在字符串中寻找一个字面的'N'字符。 DNA序列不含'N'字符。 – 2014-12-20 20:36:53
我觉得正则表达式是不是这样做的最佳选择。我说这是因为(至少据我所知),除了明确考虑所有可能的错误之外,没有简单的方法来表达任意字符串以至多与一个错误匹配。 正说,它会是这样的
AGCTAGCT|NGCTAGCT|ANCTAGCT|AGNTAGCT|AGCNAGCT|AGCTNGCT|AGCTANCT|AGCTAGNT|AGCTAGCN
也许它可以简化一点。
编辑 鉴于N是一个不匹配,接受你想要的东西的正则表达式应该用错误的替代替换每个N.
AGCTAGCT|[GCT]GCTAGCT|A[ACT]CTAGCT|AG[AGT]TAGCT|AGC[AGC]AGCT
|AGCT[GCT]GCT|AGCTA[ACT]CT|AGCTAG[AGT]T|AGCTAGC[AGC]
简化...
(A(G(C(T(A(G(C(T|[AGC])|[AGT]T)|[ACT]CT)|[GCT]GCT)|[AGC]AGCT)|[AGT]TAGCT)|[ACT]CTAGCT)|[GCT]GCTAGCT)
演示与错误的选择https://regex101.com/r/bB0gX1/1用N。
机器完成的自动任务在哪里? – Abdelouahab 2014-12-13 02:32:06
他想与AGCTAGCT匹配,最多只有一个N – 1010 2014-12-13 02:33:23
是的,但是他必须全部用手写出来并用他的眼睛数出来! – Abdelouahab 2014-12-13 02:34:07
你需要使用正则表达式吗?为什么不是一个循环? – Lynn 2014-12-13 02:22:41
您正在运行哪个lang? – 2014-12-13 02:38:30
在我看来,'N'代表'A','T','C'或'G'中的一个。不是字面的'N',而是错误的核碱基。大多数答案都假定一个字面的“N”。请澄清这一点。 – 2014-12-20 20:25:50