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 의 정규 표현 식 의 교묘 한 사용 입 니 다.당신 은 반드시 정규 를 파악 해 야 합 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 여러분 에 게 답 할 것 입 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.