有人可以帮助我在 Validators.pattern()中使用正则表达式吗?
我想要一个针对以下场景的正则表达式: -
DNA测序组的研究人员需要存储新发现的序列。设计一个接受字符串的系统,评估其有效性。有效的DNA对由 PA,NY,OH,WV 表示,并封装其他有效对。序列可以是任意数量的对。
示例有效对:
* Exmaple无效对:
PAPA - 未封装
NOH - N
OONQHH - 无效字符Q
答案 0 :(得分:0)
这是你在python中实现它的方法。您可以将相同的逻辑移植到任何其他编程语言。
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个条件:
答案 1 :(得分:0)
您描述的字符串类别称为Context Free Grammar,并且已知在正则表达式可用于匹配的范围之外。但是,如果将字符串限制为特定长度,则可以使用正则表达式,以便在该长度内匹配该模式的所有字符串。例如:
所有与长度为2或更短的模式匹配的字符串:
(PA|NY|OH|WV)
所有符合长度为4或更短的模式的字符串:
(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或更短的模式的字符串:
(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;
}