2014-01-24 3 views
0

예를 들어, 변수 day에 대한 입력은 월요일 또는 월요일, 화요일 또는 월요일, .., 금요일이 될 수 있으며 python에서 패턴을 제공하고 입력을 확인하기 위해 정규식을 사용하려고합니다.Python Regex의 패턴 일치

result = re.compile(r'\([S|M|T|W|Th|F|Sa]\)|\([S|M|T|W|Th|F|Sa],[S|M|T|W|Th|F|Sa]+\)') 
day = "(T,Th)" 
if result.match(day): 
    print "matched" 
else: 
    print 'not' 

주어진 입력이 (T, Th, F) 또는 (T, Th, F, Sa)이면 어떻게 될까요? 이러한 유형의 입력을 처리하기 위해 패턴에 어떤 조치를 취해야합니까? 거기에 어떤 해결책이 너무 길지 않을거야?

+2

'[]'은 [문자 클래스] (http://www.regular-expressions.info/charclass.html)를 나타내며,'|'는 거기에있는'또는'연산이 아닙니다. '(S | M | T | W | Th | F | Sa)'... –

답변

4

정규식 않고 대답 일 것이다 :

week = ["S", "M", "T", "W", "Th", "F", "Sa"] 
days = "(T,Th,C)" 
no_match = False 
for day in days[1:-1].split(","): #split separates your days-string, [1:-1] removes brackets 
    if day not in week: 
     no_match = True 
     break 
if no_match: 
    print "not" 
else: 
    print "matched" 

에서 [1 -1] 슬라이싱되는 표기법 bascially 그 다음에 인덱스 1 (= 2 문자) 및 끝과 문자로부터 시작되는 문자열을 작성 ~ 마지막 문자. 사실 그것은 괄호를 제거합니다.

+1

그것은 효과가 있습니다! 일 [1 : -1]이 무슨 뜻인지 나에게 설명해 주시겠습니까? – Rowel

+1

@ user3226156 기본적으로 첫 번째 및 마지막 문자를 제외합니다. 그의 예에서는 'T, Th, C'만 포함합니다. – Ray

3

사용이 정규식 :

\((S|M|T|W|Th|F|Sa)(,\s*(S|M|T|W|Th|F|Sa))*\) 

(S|M|T|W|Th|F|Sa) 일치하는 요일.

  • (M, T, W)
  • (M)
  • (T, Sa, Fr)을 :이 예를 들어 문자 클래스 (애쉬 위니 Chaudhary의 의견을 참조)

    이 일치, 대표로, 둥근 괄호하지 대괄호를 사용주의

  • (T,M,Th)
+0

그게 '*'가 사용 된 것입니다. – Rowel

+0

@ user3226156 예, 맞습니다. 이것은 '0 점 이상'을 의미합니다. – Timo