Python 에 서 는 더 이상 re.com pile 을 쓰 지 마 세 요.

4162 단어 pythonre.compile
머리말
만약 여러분 이 인터넷 에서 Python 정규 표현 식 을 검색 한다 면,당신 은 대량의 스 팸 글 이 이렇게 코드 를 쓰 는 것 을 볼 수 있 을 것 입 니 다.

import re

pattern = re.compile('     ')
text = '     '
result = pattern.findall(text)
이 글 들 의 작 가 는 다른 언어의 나 쁜 습관 에 영향 을 받 았 는 지 다른 쓰레기 글 에 의 해 오도 되 었 는 지 생각 하지 않 고 가 져 와 서 사용 했다.
Python 에 서 는 정말 re.copile 을 사용 할 필요 가 없습니다!
이 를 증명 하기 위해 서 파 이 썬 의 소스 코드 를 살 펴 보 겠 습 니 다.
PyCharm 에 입력:

import re

re.search
그리고 윈도 사용 자 는 키보드 에 있 는 Ctrl 키 를 누 르 고 왼쪽 단 추 를 누 르 면 search,맥 사용 자 는 키보드 에 있 는 Command 키 를 누 르 고 왼쪽 단 추 를 누 르 면 search,PyCharm 은 자동 으로 Python 의 re 모듈 로 이동한다.여기 서 우리 가 자주 사용 하 는 정규 표현 식 방법 을 볼 수 있 습 니 다.findall 이 든 search 든 sub 이 든 match 든 모두 이렇게 쓰 여 있 습 니 다.

_compile(pattern, flag).     (string)
예 를 들 면:

def findall(pattern, string, flags=0):
 """Return a list of all non-overlapping matches in the string.

 If one or more capturing groups are present in the pattern, return
 a list of groups; this will be a list of tuples if the pattern
 has more than one group.

 Empty matches are included in the result."""
 return _compile(pattern, flags).findall(string)
다음 그림 에서 보 듯 이:

그리고 컴 파일 을 보 겠 습 니 다.

def compile(pattern, flags=0):
 "Compile a regular expression pattern, returning a Pattern object."
 return _compile(pattern, flags)
다음 그림 에서 보 듯 이:

문제 알 아 봤 어 요?
우리 가 자주 사용 하 는 정규 표현 식 방법 은 모두 copile 을 가지 고 있 습 니 다!
쓸데없는 짓 을 할 필요 가 없습니다.
이때 반박 이 있 을 수 있다.
만약 내 가 백만 개의 문자열 을 가지 고 있다 면,어떤 정규 표현 식 을 사용 해서 일치 하 게 한다 면,나 는 이렇게 코드 를 쓸 수 있다.

texts = [            ]
pattern = re.compile('     ')
for text in texts:
 pattern.search(text)
이때,re.copile 은 한 번 만 실 행 했 습 니 다.아래 와 같이 코드 를 쓰 면:

texts = [            ]
for text in texts:
 re.search('     ', text)
같은 정규 표현 식 에 대해 100 만 번 의 re.copile 을 바 텀 에서 실행 한 셈 이다.
Talk is cheap, show me the code.
원본 코드 를 보 겠 습 니 다.정규 표현 식 re.copile 에서 호출 한 것 은 입 니 다.copile,우 리 는 보 러 간다copile 의 소스 코드 는 다음 그림 과 같 습 니 다.
빨 간 상자 의 코드,설명copile 자체 캐 시.type(pattern),pattern,flags)로 구 성 된 키 를 최대 512 개 까지 자동 으로 저장 합 니 다.같은 정규 표현 식,같은 flag 이면 두 번 호출 합 니 다copile 에 서 는 두 번 째 로 캐 시 를 직접 읽 습 니 다.
다시 말 하면 re.copile 을 수 동 으로 호출 하지 마 세 요.이것 은 다른 언어(맞습니다.제 가 말 한 것 은 자바)에서 가 져 온 나 쁜 습관 입 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기