2010-07-02 5 views
1

패턴 p와 문자열 s가 주어지면, p는 소문자라고 가정합니다. 다음 중 어느 것이 더 효율적입니까? 정규 표현식 : 대소 문자를 구별하지 않는 comparsion의 효율성

r = re.compile(r'p', RE.IGNORECASE) 
r.match(s) 

... 나 ...

r = re.compile(r'p') 
r.match(s.lower()) 
+0

패턴 # 2에서 모두 소문자라고 가정합니다. 맞습니까? 그렇지 않으면, 그들은 동일하지 않습니다 –

+1

이 질문을 입력하는 데 걸리는 시간에 이것을 벤치마킹 할 수 있었고 귀하의 질문에 더 정확하고 더 정확하게 대답 할 수있었습니다. – ryeguy

+0

@ryeguy, "벤치 마크"란 무엇을 의미합니까? – Paul

답변

3

는 정말 언어와 엔진에 의존하는 것입니다. s.lower()re.IGNORECASE은 일반적으로 현지화 또는 유니 코드 문자열 (this question 참조)을 처리하기 때문에 속도가 느립니다. 사용하는 regex 패키지가 그 것을 다루고 있고 s.lower() 메소드가 그렇지 않다면, s.lower() 메소드는 확실한 승리입니다. 그 반대.

일반적으로 s.lower() 메서드가 더 빨라질 것으로 기대합니다 (정규식보다 더 최적화되는 경향이 있습니다). 하지만 주어진 예제에서 ...

r = re.compile(r'[Pp]') 
r.match(s) 

... 중 어느 것보다 빠를 것입니다.

+0

이것은 두 배 더 빠르며 무시해 줘서 고마워! '1.2s'대 샘플 데이터의 '660ms'. – FelikZ

관련 문제