2014-12-13 92 views
-1

我想要搜索特定的(DNA)字符串'AGCTAGCT'並允許發生一個(且只有一個)不匹配(表示爲'N' )。正則表達式:允許多達一次出現某個字符

以下是比賽(沒有或一個N):

AGCTAGCT 
NGCTAGCT 
AGCNAGCT 

以下是不匹配(兩個或兩個以上NS):

AGNTAGCN 
AGNTANCN 
+3

你需要使用正則表達式嗎?爲什麼不是一個循環? – Lynn 2014-12-13 02:22:41

+0

您正在運行哪個lang? – 2014-12-13 02:38:30

+2

在我看來,'N'代表'A','T','C'或'G'中的一個。不是字面的'N',而是錯誤的核鹼基。大多數答案都假定一個字面的「N」。請澄清這一點。 – 2014-12-20 20:25:50

回答

0

在任何語言中,你可以做這樣的事情

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]*$/ 

您可以測試字符串是否與上述正則表達式匹配。

+0

我認爲這可以簡化爲'^ [^ N] * N?[^ N] * $' – 2014-12-13 02:26:24

+1

他想匹配'AGCTAGCT',而不是任何字符串。 – 1010 2014-12-13 02:38:24

+0

這個答案的一個小變化是'/^[^ N] *(N [^ N] *)?$ /'。我覺得這種風格更容易理解。 – AdrianHHH 2014-12-14 13:41:11

0

如果你正在使用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) 

然後,您將擁有四個字母中的所有排列組合。

+0

我不明白你如何接受'AGCTAGCT',最多隻有一個N. – 1010 2014-12-13 02:48:33

+0

'word.count('N')<2'可以是'一個N或不是N' – Abdelouahab 2014-12-13 02:49:50

+0

他只想要'AGCTAGCT',而不是'AGCTAGCT'任何一個字符串中最多一個N. – 1010 2014-12-13 02:50:50

0

在開始時使用反向查找來檢查字符串是否包含兩個N's或不是。

^(?!.*?N.*N)[AGCTN]{8}$ 

我假設你的字符串只包含AGCTN字母。

^(?!.*?N.*N)[AGCTN]+$ 

或者乾脆這樣,

^(?!.*?N.*N).+$ 

DEMO

+1

再一次,這是在字符串中尋找一個字面的'N'字符。 DNA序列不含'N'字符。 – 2014-12-20 20:36:53

-3

我覺得正則表達式是不是這樣做的最佳選擇。我說這是因爲(至少據我所知),除了明確考慮所有可能的錯誤之外,沒有簡單的方法來表達任意字符串以至多與一個錯誤匹配。 正說,它會是這樣的

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。

+0

機器完成的自動任務在哪裏? – Abdelouahab 2014-12-13 02:32:06

+0

他想與AGCTAGCT匹配,最多隻有一個N – 1010 2014-12-13 02:33:23

+0

是的,但是他必須全部用手寫出來並用他的眼睛數出來! – Abdelouahab 2014-12-13 02:34:07

相關問題