Javascript 用于字符串组合和序列规则的正则表达式2
有人能帮助我在验证器.pattern()中使用正则表达式吗 我需要以下场景的正则表达式:- DNA测序小组的研究人员需要储存新发现的序列。设计一个接受字符串的系统,评估其有效性。有效的DNA对由PA、NY、OH、WV表示,并封装其他有效对。序列可以是任意数量的对 有效对示例:Javascript 用于字符串组合和序列规则的正则表达式2,javascript,regex,angular,regular-language,Javascript,Regex,Angular,Regular Language,有人能帮助我在验证器.pattern()中使用正则表达式吗 我需要以下场景的正则表达式:- DNA测序小组的研究人员需要储存新发现的序列。设计一个接受字符串的系统,评估其有效性。有效的DNA对由PA、NY、OH、WV表示,并封装其他有效对。序列可以是任意数量的对 有效对示例: 普诺维亚 纽约 沃夫 PPAA *Exmaple无效对: 爸爸-没有封装 NOH-N上没有匹配对 OONQHH-无效字符Q 这就是在python中实现它的方法。您可以将相同的逻辑移植到任何其他编程语言 from co
- 普诺维亚
- 纽约
- 沃夫
- PPAA
- 爸爸-没有封装
- 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"
您必须检查4个条件:
您正在描述的字符串类别称为,并且已知它不在正则表达式可以用来匹配的范围内。但是,如果将字符串限制为特定长度,则有一些正则表达式可用于该长度内与该模式匹配的所有字符串。例如: 与长度小于等于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(P(P(P)P(P(P(P)P(P(P(P)P(P(P)P(P(P)P(P)P(P(P)P(P(P)P(P(P(P)P(P(P)P(P)P(P)NY(P)Y(P(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y(P)Y)Y(P)Y(P)Y(P)Y(P)Y(P)Y)Y(P)Y)Y(P(帕(帕)尼(尼)尼州(O124)OH | OH | WV)一个非(帕(帕)尼(尼)尼(尼)尼(尼)尼(尼)尼(OH | WV)Y Y(尼)尼(尼)尼(尼)尼(O124)OH | WV)Y)Y(Y)Y(维维维维尼)Y(V)Y(V)Y(V)Y(V)Y)Y(V)Y(V)Y)Y(Y)Y(Y)Y(Y)Y(Y)Y)Y(V)Y(V)Y(V)Y(V)Y)Y(V)Y(V)Y)Y)Y(V)Y(Y)Y)Y(V)Y(Y)Y(Y)Y)Y(Y)Y)Y(Y(Y)O(Y)Y)O(Y(Y)Y)Y(Y哦| WV)H | W(PA | NY |哦| WV)V)
如您所见,正则表达式的设计目的不是识别这种格式的模式。但是,如果您使用的是angular,则可以改为。考虑这个函数,它取一个字符串并根据它是否与模式匹配返回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;
}
函数isValidDNASequence(输入){
对于(i=0,j=输入,长度-1,I.和您的代码在哪里),在JavaScript中不可能用正则表达式来检查这种情况。更好的方法是在中间分割字符串,然后反转和翻译第二部分(p=> a,n=> y,o=> h,w=v)。,然后测试这两部分是否相等。用正则表达式实现这一点有点疯狂。但是如果你能用正则表达式解决它,那么就发布解决方案。
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;
}