有人可以幫我用正則表達式來使用Validators.pattern()?正則表達式的字符串組合和序列規則角2
我想對以下情形正則表達式: -
研究人員的DNA測序組需要存儲新發現的序列。設計一個系統,接受一個字符串,評估其有效性。有效的DNA對由PA,NY,OH,WV表示並封裝其他有效配對。序列可以是任意數量的對。
實施例有效對:
- PNOWVHYA
- NY
- WOHV
- PPAA
*〔實施例無效雙:
PAPA - 未封裝
NOH - N個
OONQHH不匹配對 - 無效字符Q
有人可以幫我用正則表達式來使用Validators.pattern()?正則表達式的字符串組合和序列規則角2
我想對以下情形正則表達式: -
研究人員的DNA測序組需要存儲新發現的序列。設計一個系統,接受一個字符串,評估其有效性。有效的DNA對由PA,NY,OH,WV表示並封裝其他有效配對。序列可以是任意數量的對。
實施例有效對:
*〔實施例無效雙:
PAPA - 未封裝
NOH - N個
OONQHH不匹配對 - 無效字符Q
這是你將如何實現它的蟒蛇。您可以將相同的邏輯移植到任何其他編程語言。
from collections import Counter
code_to_test = 'OONQHH'
valid_codes=['PA','NY','OH','WV']
valid_code_letters=['P','A','N','Y','O','H','W','V']
w,x,y = False,False,False
#test condition 1
alpha=list(code_to_test)
if set(alpha) <= set(valid_code_letters):
w=True
#test condition 2,3
if len(code_to_test)%2==0:
if len(code_to_test)==2:
if code_to_test in valid_codes:
x=True
else:
a = [code_to_test[i:i+2] for i in range(0, len(code_to_test), 2)]
for q in a:
if q in valid_codes:
break
else:
x=True
#test condition 4
ccount = Counter(code_to_test)
if ccount['P']==ccount['A'] and ccount['N']==ccount['Y'] and ccount['O']==ccount['H'] and ccount['W']==ccount['V']:
y=True
if w and x and y:
print "VALID CODE"
else:
print "INVALID CODE"
輸出:
INVALID CODE
你必須檢查4個條件:
您正在描述的字符串的類別稱爲Context Free Grammar,並且已知它在正常表達式可用於匹配的範圍之外。但是,如果將字符串限制爲特定長度,則可以使用正則表達式來匹配該長度內與該模式匹配的所有字符串。例如:
所有匹配的長度爲2或更小的圖案的字符串: (P(PA|NY|OH|WV)A|N(PA|NY|OH|WV)Y|O(PA|NY|OH|WV)H|W(PA|NY|OH|WV)V)
所有匹配的長度爲6的圖案串或: (PA|NY|OH|WV)
所有匹配的長度爲4或更小的圖案串less: (P(P(PA|NY|OH|WV)A|N(PA|NY|OH|WV)Y|O(PA|NY|OH|WV)H|W(PA|NY|OH|WV)V)A|N(P(PA|NY|OH|WV)A|N(PA|NY|OH|WV)Y|O(PA|NY|OH|WV)H|W(PA|NY|OH|WV)V)Y|O(P(PA|NY|OH|WV)A|N(PA|NY|OH|WV)Y|O(PA|NY|OH|WV)H|W(PA|NY|OH|WV)V)H|W(P(PA|NY|OH|WV)A|N(PA|NY|OH|WV)Y|O(PA|NY|OH|WV)H|W(PA|NY|OH|WV)V)V)
正如您所看到的,正則表達式並不旨在識別此格式的模式。但是,如果您正在使用角度,則可以改爲use a custom validator。考慮這個函數需要一個字符串,並根據它是否匹配模式返回true或false:
function isValidDNASequence(input){
for(i=0, j=input.length-1; i<j; i++, j--){
if(!(
(input[i]==='P' && input[j]==='A') ||
(input[i]==='N' && input[j]==='Y') ||
(input[i]==='O' && input[j]==='H') ||
(input[i]==='W' && input[j]==='V')
) || i === j) return false;
}
return true;
}
你的代碼在哪裏? –
在javascript中使用正則表達式模式來檢查這種事情是不可能的。 –
更好的方法是在中間分割字符串,然後翻轉第二部分(P => A,N => Y,O => H,W => V),然後測試兩個字符串零件等於或不等於零。 –