2016-11-18 7 views
2

Validators.pattern()에서 정규 표현식을 사용하도록 도와 줄 사람이 있습니까? 하는 DNA 시퀀싱 그룹의문자열 조합 및 시퀀스 규칙에 대한 정규식 2

연구원 새로 발견 시퀀스를 저장해야 - :

나는 다음과 같은 시나리오에 대한 정규식합니다. 문자열을 받아들이고 유효성을 평가할 시스템을 설계하십시오. 유효한 DNA 쌍은 PA, NY, OH, WV으로 표시되며 다른 유효한 쌍을 캡슐화합니다. 시 v 스는 임의의 수의 쌍일 수 있습니다.

예 유효한 쌍 :

  • PNOWVHYA
  • NY
  • WOHV
  • PPAA

* Exmaple 무효 쌍 :

  • 파파 -

  • NOH를 캡슐화하지 - N

  • OONQHH에 일치하는 쌍 - 유효하지 않은 문자 Q는

+0

그리고 코드는 어디에 있습니까? –

+0

자바 스크립트에서 정규식 패턴으로 이런 종류의 것을 검사하는 것은 불가능합니다. –

+0

더 나은 접근법은 문자열을 가운데로 분할 한 다음 두 번째 부분을 뒤집어 번역하고 (P => A, N => Y, O => H, W => V), 두 부분은 같거나 같지 않습니다. –

답변

0

이것은 당신이 파이썬에서 그것을 구현하는 것이 방법이다. 동일한 논리를 다른 프로그래밍 언어로 이식 할 수 있습니다.

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 조건 확인해야
INVALID CODE 

: 테스트하는 코드의 문자 집합 또는 주어진 코드 문자와 동일하게 설정 인 경우

  1. 합니다.
  2. 코드가 짝수 인 경우.
  3. 문자가 짝수이면 암호화됩니다.
  4. 암호화 된 코드가 유효한 코드로 구성되어있는 경우.
0

설명하는 문자열의 범주는 Context Free Grammar이며 정규식을 사용하여 일치시킬 수있는 범위를 벗어나는 것으로 알려져 있습니다. 그러나 문자열을 특정 길이로 제한하면 해당 길이 내에서 해당 패턴과 일치하는 모든 문자열에 사용할 수있는 정규 표현식이 있습니다.예를 들어

길이 2 이하의 패턴과 일치하는 모든 문자열 : 길이 6의 패턴과 일치 (P(PA|NY|OH|WV)A|N(PA|NY|OH|WV)Y|O(PA|NY|OH|WV)H|W(PA|NY|OH|WV)V)

모든 문자열이나 : 길이는 4 이하의 패턴과 일치 (PA|NY|OH|WV)

모든 문자열 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; 
}