2016-06-25 4 views
0

정규식을 사용하여 튜플 세트를 기반으로 사용자 입력을 필터링하고 싶습니다. set of tuples에 사용자 입력이없고 an alphanumeric character이 아닌 경우 오류 메시지가 반환되어야합니다. 나는 파이썬 정규 표현식 코드에서 튜플에 어떻게 접근 할 수 있는가? 그래서 나는 src.items()을 전달했는데, 어떻게 탈출 기능을 사용하여 src.items() 값을 가져 오지 않았는가, 아니면이 방법으로해서는 안된다.사용자 입력을 필터링하기 위해 튜플에서 파이썬 정규식 사용하기

내 코드 :

import re 

direction = ('north', 'south', 'east', 'west', 'down', 'up', 'left', 'right', 'back') 
verb = ('go', 'stop', 'kill', 'eat') 
stop = ('the', 'in', 'of', 'from', 'at', 'it') 
noun = ('door', 'bear', 'princess', 'cabinet')  

src = {'direction': direction, 
     'verb': verb, 
     'stop': stop, 
     'noun': noun 
     } 

# use this to pick out error strings from user input 
    er = r"*[\W | src.items()]" 
    ep = re.compile(er, re.IGNORECASE) 

답변

0

이 regexps '에를 사용하기에 좋은 장소가 아닌, 그 유효한 파이썬 정규 표현식처럼 아무것도 없다.

사용자 입력 (소문자로 강요되었을 수도 있음)이 모든 명령과 동일한 지 여부를 루프에서 확인하는 것이 좋습니다. 사용자 입력이 에서 튜플의 집합을 찾을 수없는 경우 오류 메시지가 반환해야

및 영숫자

하면되지 않습니다 :

1

첫째, 거기에 중복 여기에 사용자 입력이 튜플 세트에있는 경우 어떻게 영숫자가 아닌 문자가 포함될 수 있습니까? 또한 개별 단어를 테스트하거나 한 번에 구문을 완료하는 경우 지정하지 않습니다.

다른 접근 방법을 시도해 보겠습니다. 두 번째로, 우리는 튜플을 기술적 인 이유가 아니라 의미 론적 인 것들 (동질성 ->리스트, 이기종 -> 형제)으로 바꿀 것입니다. 튜플). 그리고 우리는 이제 간단하게 split()in 테스트를 위해 정규 표현식을 던질 것입니다. 마지막으로, 우리는 완전한 구를 테스트 할 수 있습니다 :

vocabulary = { 
    'direction': ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right', 'back'], 
    'verb': ['go', 'stop', 'kill', 'eat'], 
    'stop': ['the', 'in', 'of', 'from', 'at', 'it'], 
    'noun': ['door', 'bear', 'princess', 'cabinet'] 
    } 

vocabulary_list = [word for sublist in vocabulary.values() for word in sublist] 

phrases = ["Go in the east door", "Stop at the cabinet", "Eat the bear", "Do my taxes"] 

# use this to pick out error strings from user input 
for phrase in phrases: 
    if any(term.lower() not in vocabulary_list for term in phrase.split()): 
     print phrase, "-> invalid" 
    else: 
     print phrase, "-> valid" 

는 쉼표와 마침표와 같은 일부 puctuation을 허용하고 단순히 그들을 제거보다는 판단 고려 수도, 여기에서

Go in the east door -> valid 
Stop at the cabinet -> valid 
Eat the bear -> valid 
Do my taxes -> invalid 

을 생산하고 있습니다.

+0

한 번에 전체 문장을 테스트하고 있습니다. –

관련 문제