2014-01-28 6 views
7

re.VERBOSE 모드에서 정규식을 작성하고 싶지만 오류없이 자세한 부분을 추가 할 것이라고 확신하지 못합니다.두 파이썬 정규식 패턴이 같은지 확인하십시오

이론적으로 두 개의 regexes (역 참조가없는)의 등가성은 자동 생성기를 생성하고 그래프 bijection을 찾으려고 시도 할 때 발견 할 수 있습니다. 하지만 regexes를 비교할 때 볼 수있는 인스턴스 메서드는 없습니다.

정규 표현식의 자동화를 생성하거나 직접 비교할 수 있습니까? 가급적이면 표준 라이브러리와 비교할 수 있습니까?

(나는 이미 내 문제에 대한 다른 솔루션을 결정했습니다, 그러나 이것은 나에게 여전히 관심이있다.)

답변

6

당신은 문서화되지 않은 re.DEBUG 기능을 사용할 수 있습니다

>>> r1 = re.compile("foo[bar]baz", re.DEBUG) 
literal 102 
literal 111 
literal 111 
in 
    literal 98 
    literal 97 
    literal 114 
literal 98 
literal 97 
literal 122 
>>> r2 = re.compile("""foo # foo! 
...     [bar] # b or a or r! 
...     baz # baz!""", re.VERBOSE|re.DEBUG) 
literal 102 
literal 111 
literal 111 
in 
    literal 98 
    literal 97 
    literal 114 
literal 98 
literal 97 
literal 122 

출력하는 경우를 r1r2도 동일합니다.

+0

문서화 된 것보다 상세하지 못했습니다. 또한 regexes의 평등을 검사하는 함수를 작성하는 동안 결과를 캐스팅하는 re.compile 때문에 re.DEBUG가 출력을 제공하지 않을 수 있음을 발견했습니다. 그리고 그것은 정규식의 이론적 인 동등성이 아니기 때문에, 이것은're.VERBOSE' 변경에만 적용됩니다. 다음은 예제입니다. http://pastebin.com/DeCWLmF8 (이 주석에서 대답에 자유롭게 추가하십시오.) – leewz

+0

're'가 디버그 출력을 저장하지 않고 실망 스럽습니다. 're.DEBUG'로 강제 재 컴파일 할 수 없습니다. – leewz

+1

재 컴파일을 강제하지 않는're.DEBUG'에 관한 문제 제기 : http://bugs.python.org/issue20426 – leewz

관련 문제