我想要搜索特定的(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