2009-07-20 5 views
8

자주 복잡한 정규 표현식을 구축하고 싶습니다. 나는 현재이 일을 알고 있어요 유일한 방법은, 문자열 연산 통해 예컨대 :Python에서 합성 가능 Regexp

Year = r'[12]\d{3}' 
Month = r'Jan|Feb|Mar' 
Day = r'\d{2}' 
HourMins = r'\d{2}:\d{2}' 

Date = r'%s %s, %s, %s' % (Month, Day, Year, HourMins) 
DateR = re.compile(Date) 

다른 방법 또는 작성 가능 regexps '에을 가지고 파이썬에서보다 체계적인 접근 방법 (어쩌면 모듈)을 알고 누구인가? 개별적으로 (예 : 개별 컴파일 옵션을 사용하여) 개별적으로 각 정규식을 컴파일 하겠지만 더 이상 구성하지 않는 방법이 있습니다.

+0

당신이하고있는 방식은 분명하고 간결 해 보입니다. 오, 그런데, 당신은 당신의'Date' 변수를위한 문자열에 "r"이 필요하지 않습니다. –

+0

파이썬은 정규 표현식에서 주석을 허용합니까? –

+1

mmyers, 예. re.VERBOSE 플래그를 사용할 때 주석에 #을 사용할 수 있습니다. –

답변

1

당신은 사용할 수 핑의 rxb :

year = member("1", "2") + digit*3 
month = either("Jan", "Feb", "Mar") 
day = digit*2 
hour_mins = digit*2 + ":" + digit*2 

date = month + " " + day + ", " + year + ", " + hour_mins 

결과 날짜를 직접 일치 시키거나 사용하실 수 있습니다.

DateR = date.compile() 
+0

그 답은 내가 찾던 답변처럼 보입니다. 나는 모듈이 컴파일 옵션과 일치하는 그룹에 대해 어떻게되는지 확인해야하지만, 처음부터 그것이 perferct :-)로 보인다. – ThomasH

4

이 파이썬의 형식 구문을 사용할 수 있습니다 :

types = { 
    "year":   r'[12]\d{3}', 
    "month":  r'(Jan|Feb|Mar)', 
    "day":   r'\d{2}', 
    "hourmins": r'\d{2}:\d{2}', 
} 
import re 
Date = r'%(month)s %(day)s, %(year)s, %(hourmins)s' % types 
DateR = re.compile(Date) 

가 (. 추가 된 월의 주위에 그룹화 주 | 이월 | 월)

+0

여전히 문자열 작업에 의존합니다. – ThomasH

+1

네!? (/ * 벙어리 코멘트 시스템 */주위에 작동하는 패딩) –