Python 에서 정규 표현 식 의 교묘 한 사용 패키지

머리말
정규 표현 식 은 문자열 에서 규칙 을 발견 하고'추상 적'인 기 호 를 통 해 표현 하 는 것 이다.예 를 들 어 2,5,10,17,26,37 과 같은 숫자 서열 에 대해 7 번 째 값 을 어떻게 계산 하 는 지 는 반드시 이 서열 의 규칙 을 찾 은 다음 에 n2+1 이라는 표현 식 으로 그 규칙 을 묘사 한 다음 에 7 번 째 값 을 50 으로 얻 어야 한다.일치 해 야 할 문자열 에 대해 서도 발견 규칙 을 첫 번 째 단계 로 하고 본 고 는 정규 표현 식 을 사용 하여 문자열 의 조회 일치,교체 일치,분할 일치 등 을 완성 합 니 다.

정규 기호
문자열 의 일치 에 들 어가 기 전에 어떤 정규 기호 가 자주 사용 되 는 지 알 아 보 세 요.다음 표 참조:

만약 독자 가 위의 표 의 내용 을 비교적 능숙 하 게 파악 할 수 있다 면 문자열 처리 과정 에서 여유 가 있 을 것 이 라 고 믿는다.앞에서 말 한 바 와 같이 이 절 은 정규 표현 식 을 바탕 으로 문자열 의 조회,교체 와 분할 작업 을 완성 할 것 입 니 다.이 작업 들 은 모두 re 모듈 을 가 져 오고 다음 과 같은 몇 가지 함 수 를 사용 해 야 합 니 다.
문자열 일치 조회
re 모듈 의 findall 함 수 는 지정 한 문자열 을 옮 겨 다 니 며 일치 하 는 모든 하위 문자열 을 가 져 오고 목록 결 과 를 되 돌려 줍 니 다.이 함수 의 매개 변 수 는 다음 과 같다.findall(pattern, string, flags=0)pattern:일치 하 는 정규 표현 식 을 지정 합 니 다.
string:처리 할 문자열 을 지정 합 니 다.
flags:일치 하 는 모드 를 지정 합 니 다.자주 사용 하 는 값 은 re.I,re.M,re.S 와 re.X 일 수 있 습 니 다.re.I 모드 는 정규 표현 식 이 대소 문자 에 민감 하지 않 게 하 는 것 입 니 다.re.M 모드 는 정규 표현 식 이 여러 줄 로 일치 하도록 하 는 것 입 니 다.re.S 모드 는 정규 기 호 를 가리 킵 니 다.줄 바 꿈 자 를 포함 하여 임의의 문자 와 일치 할 수 있 습 니 다.re.X 모드 는 정규 표현 식 을 더 상세 하 게 쓸 수 있 도록 합 니 다.예 를 들 어 여러 줄 표시,공백 문자 무시,주석 추가 등 입 니 다.
문자열 의 일치 교체
re 모듈 의 sub 함수 기능 은 문자열 의 replace 방법 과 유사 하 며,이 함 수 는 정규 표현 식 에 따라 일치 하 는 내용 을 repl 로 대체 합 니 다.이 함수 의 매개 변 수 는 다음 과 같다.sub(pattern, repl, string, count=0, flags=0)pattern:findall 함수 의 pattern 과 같 습 니 다.
repl:교 체 된 새 값 을 지정 합 니 다.
string:findall 함수 의 string 과 같 습 니 다.
count:최대 교체 횟수 를 지정 하 는 데 사 용 됩 니 다.기본 값 은 모든 교체 입 니 다.
flags:findall 함수 의 flags 와 같 습 니 다.
문자열 의 일치 분할
re 모듈 의 split 함 수 는 문자열 을 지정 한 정규 표현 식 에 따라 구분 하 는 문자열 과 유사 한 split 방법 입 니 다.이 함수 의 구체 적 인 매개 변 수 는 다음 과 같다.split(pattern, string, maxsplit=0, flags=0)pattern:findall 함수 의 pattern 과 같 습 니 다.
maxsplit:최대 분할 횟수 를 지정 합 니 다.기본 값 은 모든 분할 입 니 다.
string:findall 함수 의 string 과 같 습 니 다.
flags:findall 함수 의 flags 와 같 습 니 다.
실전 사례
만약 에 위의 함수 와 매개 변수 의 미 를 모두 파악 했다 면 사례 를 통 해 이 해 를 강화 해 야 한다.그 다음 에 위의 세 가지 함 수 를 예 로 들 어 설명 한다.

#           re   
import re 
#      string8         
string8 = "{ymd:'2018-01-01',tianqi:' ',aqiInfo:'    '},{ymd:'2018-01-02',tianqi:' ~  ',aqiInfo:' '},{ymd:'2018-01-03',tianqi:'  ~  ',aqiInfo:' '},{ymd:'2018-01-04',tianqi:'  ~  ',aqiInfo:' '}" 
#          findall   
print(re.findall("tianqi:'(.*?)'", string8)) 
#   string9    O      
string9 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise' 
#          findall   
print(re.findall('w*ow*',string9, flags = re.I)) 
#  string10      、        
string10 = '  ,     4                 (ITER)          ,         、    、      、     、      、         。' 
#          sub   
print(re.sub('[,。、a-zA-Z0-9()]','',string10)) 
#  string11             
string11 = '2 2  | 101.62  |   /7  |    
      -    -    - 2005  ' 
#          split   
split = re.split('[-| 
]', string11) 
print(split) 
#         
split_strip = [i.strip() for i in split] 
print(split_strip) 
out: 
[' ', ' ~  ', '  ~  ', '  ~  '] 
['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration', 'of'] 
                                                                          
['2 2  ', ' 101.62  ', '   /7  ', '    ', '      ', '    ', '    ', ' 2005  '] 
['2 2 ', '101.62 ', '  /7 ', '  ', '    ', '  ', '  ', '2005  ']
위의 결과 와 같이 첫 번 째 예 에서 정규 표현 식'tianqi:'(.*?)'를 통 해목표 데이터 획득 을 실현 합 니 다.괄호 를 사용 하지 않 으 면'tianqi:'맑 음','tianqi:'음~소우'와 같은 값 이 발생 합 니 다.따라서 괄호 를 붙 이 는 것 은 그룹 을 나 누고 그룹의 내용 만 되 돌려 주 는 것 입 니 다.
두 번 째 예 는 정규 표현 식 을 괄호 에 쓰 지 않 았 습 니 다.괄호 를 쓰 면 같은 결 과 를 되 돌려 줍 니 다.따라서 findall 은 일치 하 는 조건 을 만족 시 키 는 목록 값 을 되 돌려 주 는 것 입 니 다.괄호 가 있 으 면 괄호 안의 일치 값 만 되 돌려 줍 니 다.
세 번 째 예 는 바 꾸 는 방법 을 사용 하여 모든 문장 부 호 를 빈 문자 로 바 꾸 어 삭제 효 과 를 실현 한다.
네 번 째 예 는 문자열 에 대한 분할 입 니 다.정규'[,...a-zA-Z0-9()]'분할 하면 되 돌아 오 는 결과 에 빈 문자 가 포함 되 어 있 습 니 다.예 를 들 어'2 실 2 청'뒤에 빈 문자 가 있 습 니 다.목록 에 있 는 모든 요소 의 앞 뒤 빈 문 자 를 삭제 하기 위해 목록 표현 식 을 사용 하고 문자열 의 strip 방법 과 결합 하여 빈 문자 의 압축 을 완성 합 니 다.
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 Python 의 정규 표현 식 의 교묘 한 사용 입 니 다.당신 은 반드시 정규 를 파악 해 야 합 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 여러분 에 게 답 할 것 입 니 다!

좋은 웹페이지 즐겨찾기