2012-09-20 2 views
1

저는 Python을 배우고 있으며 IMAP에서받은 "From"필드의 형식을 지정해야합니다. 나는 str.find()str.strip()을 사용하고 정규식을 사용하여 시도했다. find() 등을 사용하면 내 함수가 re (내가 시간을 잰 것)보다 훨씬 빠르게 실행됩니다. 그래서 일 때 사용하는 것이 더 낫습니다. 누구든지 그것에 관련된 좋은 링크/기사가 있습니까? 파이썬 문서는 분명히 언급하지 않는다. ...Python : regex vs find(), strip()

답변

10

find은 정규 표현식이 패턴과 일치하는 동안 정확한 문자 시퀀스와 일치한다. 당연히 정확한 시퀀스 만 찾는 것이 더 빠릅니다 (정규 표현식 패턴도 정확한 시퀀스 일지라도 여전히 약간의 오버 헤드가 있습니다).

위의 결과로 정확한 시퀀스를 알고있는 경우 find을 사용하고 그렇지 않은 경우 정규식 (또는 다른 것)을 사용해야합니다. 실제로 사용해야하는 정확한 접근법은 직면 한 문제의 복잡성에 달려 있습니다.

참고로, 파이썬 re 모듈은 compile 메소드를 제공합니다.이 메소드를 사용하면 반복적으로 사용할 정규 표현식을 미리 컴파일 할 수 있습니다. 같은 패턴을 여러 번 사용하면 속도가 크게 향상 될 수 있습니다.

+0

감사합니다. 나는 두 가지 사이에 좋은 라인이 있음을 발견했다. 나는'str.find ('abb')','str [: str.find ('abb')]'...를 여러번 실행하여 문자열 ... 그리고 그것은 여전히 ​​빠르게보다 작동합니다. 나는 당신이 정말로 이것을 "오버 헤드"가 어느 시점에서 볼 가치가 있는지를 알기 위해 시간을 맞추어야한다고 생각합니다. – janeh

+0

지금 '컴파일'을 시도해 볼 것입니다. – janeh

3

복잡한 작업을 수행하려는 경우 re을 사용해야합니다. 문자열 메서드를 사용하는 것보다 확장 성이 좋습니다.

문자열 메서드는 단순하고 무언가를 수행하는 데 적합하며 정규 표현식을 사용하는 데 별 도움이되지 않습니다.

그래서, 어떤 일을 하느냐에 따라 다르지만 일반적으로 정규 표현식을 사용하는 것이 더 강력하기 때문에 사용해야합니다.