Python 정규 표현 식 의 7 가지 사용 사례 상세 설명
본 고 는 Python 정규 표현 식 문장의 일부분 입 니 다.이 시리즈 의 첫 번 째 글 에서 우 리 는 Python 의 정규 표현 식 을 어떻게 사용 하 는 지 에 중점 을 두 고 Python 의 독특한 특성 을 강조 할 것 입 니 다.
Python 에서 문자열 을 검색 하고 찾 는 방법 을 소개 합 니 다.그리고 우 리 는 우리 가 찾 은 일치 하 는 대상 의 하위 항목 을 어떻게 그룹 으로 나 누 는 지 에 대해 토론 합 니 다.
우리 가 사용 하고 자 하 는 Python 의 정규 표현 식 모듈 을 통상 적 으로're'라 고 부른다.
>>> import re
1.Python 의 원본 형식 문자열Python 컴 파 일 러 는 문자열 상수 의 전의 문 자 를'\'(역 슬 래 쉬)로 표시 합 니 다.
만약 에 역 슬 래 쉬 뒤에 컴 파일 러 가 식별 할 수 있 는 특수 문 자 를 따라 가면 전체 전의 서열 은 대응 하 는 특수 문자 로 대 체 될 것 이다(예 를 들 어'컴 파일 러 가 줄 바 꿈 문자 로 대 체 될 것 이다).
그러나 이것 은 Python 에서 정규 표현 식 을 사용 하 는 데 문 제 를 가 져 왔 습 니 다.'re'모듈 에서 도 정규 표현 식 의 특수 문자(예 를 들 어*와+)를 바 꾸 기 위해 역 슬 래 쉬 를 사용 하기 때 문 입 니 다.
이 두 가지 방식 의 혼합 은 때때로 전의 문자 자 체 를 바 꿀 수 밖 에 없다 는 것 을 의미한다.(특수 문자 가 Python 과 정규 표현 식 의 컴 파 일 러 에 의 해 동시에 식 별 될 때)그러나 다른 때 는 이렇게 할 필요 가 없다.(특수 문자 가 Python 컴 파 일 러 에 의 해 만 식 별 될 수 있다 면)
얼마나 많은 역 슬 래 쉬 가 필요 한 지 알 아 내 는 데 우리 의 마음 을 두 기보 다 는 원본 문자열 로 대체 할 수 있다.
원본 문자열 은 일반 문자열 의 작은 따옴표 앞 에'r'문 자 를 추가 해서 간단하게 만 들 수 있 습 니 다.문자열 이 원본 형식 일 때 Python 컴 파일 러 는 변경 을 시도 하지 않 습 니 다.본질 적 으로 컴 파일 러 에 게 문자열 에 전혀 간섭 하지 말 라 고 말 하고 있다.
>>> string = 'This is a
normal string'
>>> rawString = r'and this is a
raw string'
>>> print string
>>> print rawString
and this is a
raw string
。
Python 에서 정규 표현 식 을 사용 하여 찾기're'모듈 은 입력 한 문자열 에 대해 정확 한 조 회 를 하 는 몇 가지 방법 을 제공 합 니 다.우리 가 토론 할 방법 은 다음 과 같다.
•re.match()
•re.search()
•re.findall()
모든 방법 은 정규 표현 식 과 검색 할 문자열 을 받 습 니 다.우 리 는 이 모든 방법 을 더욱 상세 하 게 살 펴 보고 그들 이 어떻게 일 하 는 지,그리고 그들 이 각각 어떤 차이 가 있 는 지 알 아 보 자.
2.re.match 를 사용 하여 C 일치 찾기 시작
match()방법 부터 살 펴 보 겠 습 니 다.match()방법의 작업 방식 은 검색 문자열 의 시작 일치 모드 에서 만 일치 하 는 대상 을 찾 을 수 있 습 니 다.
예 를 들 어 문자열'dog cat dog'에 대해 mathch()방법 을 호출 하면'dog'모드 를 찾 으 면 일치 합 니 다.
>>> re.match(r'dog', 'dog cat dog')
<_sre.SRE_Match object at 0xb743e720<
>>> match = re.match(r'dog', 'dog cat dog')
>>> match.group(0)
'dog'
우 리 는 잠시 후에 group()방법 에 대해 더 많은 토론 을 할 것 이다.이제 우 리 는 0 을 매개 변수 로 호출 했 고 group()방법 으로 찾 은 일치 하 는 패턴 을 되 돌려 주 는 것 만 알 아야 합 니 다.나 는 돌아 오 는 SRE 도 잠시 생략 했다.Match 대상,우 리 는 곧 그것 에 대해 토론 할 것 이다.
그러나 같은 문자열 에 math()방법 을 호출 하면'cat'모드 를 찾 으 면 일치 하 는 문자열 을 찾 을 수 없습니다.
>>> re.match(r'cat', 'dog cat dog')
>>>
3.re.search 를 사용 하여 C 가 임의의 위치 에 일치 하 는 지 찾 습 니 다.search()방법 은 match()와 유사 합 니 다.그러나 search()방법 은 문자열 의 시작 에서 만 일치 하 는 것 을 제한 하지 않 습 니 다.따라서 예제 문자열 에서'cat'를 찾 으 면 일치 하 는 것 을 찾 을 수 있 습 니 다.
search(r'cat', 'dog cat dog')
>>> match.group(0)
'cat'
그러나 search()방법 은 일치 하 는 항목 을 찾 은 후에 계속 찾 지 않 습 니 다.따라서 예제 문자열 에서 searc()방법 으로'dog'을 찾 으 면 처음으로 나타 난 위치 만 찾 을 수 있 습 니 다.
>>> match = re.search(r'dog', 'dog cat dog')
>>> match.group(0)
'dog'
4.re.findall C 모든 일치 하 는 대상 사용지금까지 Python 에서 제 가 가장 많이 사용 한 검색 방법 은 findall()방법 입 니 다.findall()방법 을 호출 하면 match 대상 이 아 닌 모든 일치 하 는 패턴 의 목록 을 쉽게 얻 을 수 있 습 니 다.나한 텐 그게 더 쉬 워.예제 문자열 에 findall()방법 을 호출 합 니 다.
['dog', 'dog']
>>> re.findall(r'cat', 'dog cat dog')
['cat']
5.match.start 와 match.end 방법 사용 하기그렇다면 이전 search()와 match()방법 이 이전에 우리 에 게 돌아 온'match'대상 은 무엇 일 까?
간단 한 문자열 의 일치 부분 만 되 돌려 주 는 것 과 달리 search()와 match()가 되 돌려 주 는'일치 대상'은 실제 적 으로 짝 짓 기 문자열 에 대한 포장 류 입 니 다.
이전에 당신 은 내 가 그룹()을 호출 하 는 방법 으로 일치 하 는 하위 문자열 을 얻 을 수 있 는 것 을 보 았 습 니 다.(우 리 는 다음 부분 에서 볼 수 있 습 니 다.사실상 일치 하 는 대상 은 그룹 문 제 를 처리 할 때 매우 유용 합 니 다.)그러나 일치 하 는 대상 은 더 많은 하위 문자열 에 대한 정 보 를 포함 하고 있 습 니 다.
예 를 들 어 match 대상 은 원본 문자열 의 시작 과 끝 위 치 를 알려 줄 수 있 습 니 다.
>>> match = re.search(r'dog', 'dog cat dog')
>>> match.start()
0
>>> match.end()
3
이런 정 보 를 아 는 것 은 때때로 매우 유용 하 다.6.mathch.group 을 사용 하여 숫자 로 그룹 을 나 눕 니 다.
내 가 전에 말 했 듯 이 일치 하 는 대상 은 그룹 을 처리 할 때 매우 능숙 하 다.
그룹 을 나 누 는 것 은 전체 정규 표현 식 의 특정한 하위 문자열 을 포 지 셔 닝 하 는 능력 입 니 다.전체 정규 표현 식 의 일부분 으로 그룹 을 정의 한 다음 이 부분 에 해당 하 는 내용 을 단독으로 찾 을 수 있 습 니 다.
그것 이 어떻게 일 하 는 지 봅 시다.
>>> contactInfo = 'Doe, John: 555-1212'
내 가 방금 만 든 문자열 은 누군가의 주소록 에서 꺼 낸 세 션 과 유사 하 다.이 줄 과 일치 하 는 정규 표현 식 을 사용 할 수 있 습 니 다.
>>> re.search(r'\w+, \w+: \S+', contactInfo)
<_sre.SRE_Match object at 0xb74e1ad8<
정규 표현 식 의 특정 부분 을 괄호(문자'('와')')로 둘러싸 면 내용 을 그룹 으로 나 눈 다음 하위 그룹 을 따로 처리 할 수 있 습 니 다.
>>> match = re.search(r'(\w+), (\w+): (\S+)', contactInfo)
이 그룹 들 은 그룹 대상 의 group()방법 으로 얻 을 수 있 습 니 다.정규 표현 식 에서 왼쪽 에서 오른쪽으로 나타 나 는 숫자 순 서 를 통 해 찾 을 수 있 습 니 다(1 부터).
>>> match.group(1)
'Doe'
>>> match.group(2)
'John'
>>> match.group(3)
'555-1212'
그룹의 순서 가 1 에서 시 작 된 이 유 는 0 번 째 그룹 이 모든 일치 하 는 대상 을 저장 하기 위해 예약 되 어 있 기 때 문 입 니 다.
>>> match.group(0)
'Doe, John: 555-1212'
7.match.group 을 사용 하여 별명 으로 그룹 을 나 누 기특히 정규 표현 식 에 그룹 이 많 을 때 그룹의 출현 순 서 를 통 해 포 지 셔 닝 이 비 현실 적 으로 변 할 때 가 있다.Python 은 다음 문 구 를 통 해 그룹 이름 을 지정 할 수 있 습 니 다:
>>> match = re.search(r'(?P
우 리 는 그룹()방법 으로 그룹의 내용 을 가 져 올 수 있 지만,이 럴 때 는 이전에 사 용 했 던 그룹의 위치 가 아 닌 그룹 이름 을 사용 해 야 합 니 다.
>>> match.group('last')
'Doe'
>>> match.group('first')
'John'
>>> match.group('phone')
'555-1212'
이것 은 코드 의 명확 성과 가 독성 을 크게 강화 했다.정규 표현 식 이 갈수 록 복잡 해 지면 어떤 내용 을 캡 처 할 때 그룹 을 나 누 는 것 이 점점 어려워 질 것 이 라 고 상상 할 수 있다.당신 의 그룹 이름 은 당신 과 당신 의 독자 에 게 당신 의 의 도 를 명확 하 게 알려 줄 것 입 니 다.findall()방법 은 그룹 대상 을 되 돌려 주지 않 더 라 도 그룹 을 사용 할 수 있 습 니 다.이와 유사 하 게 findall()방법 은 원 그룹의 집합 을 되 돌려 줍 니 다.각 원 그룹의 N 번 째 요 소 는 정규 표현 식 의 N 번 째 그룹 에 대응 합 니 다.
>>> re.findall(r'(\w+), (\w+): (\S+)', contactInfo)
[('Doe', 'John', '555-1212')]
단,그룹 이름 은 findall()방법 에 적용 되 지 않 습 니 다.본 논문 에서 우 리 는 Python 에서 정규 표현 식 을 사용 하 는 기 초 를 소개 했다.우 리 는 원본 문자열 형식 을 배 웠 습 니 다.match(),search(),and findall()방법 을 사용 하여 기본 적 인 조 회 를 하 는 방법 과 일치 하 는 대상 의 하위 구성 요 소 를 그룹 별로 처리 하 는 방법 도 배 웠 습 니 다.
여느 때 와 마찬가지 로 이 주제 에 대한 내용 을 더 보 려 면 re 모듈 의 Python 공식 문 서 는 매우 좋 은 자원 입 니 다.
앞으로 의 글 에서 우 리 는 Python 의 정규 표현 식 응용 에 대해 더욱 깊이 토론 할 것 이다.우 리 는 일치 하 는 대상 을 더욱 전면적으로 학습 하고 문자열 에서 바 꾸 는 방법 을 배 울 것 입 니 다.심지어 텍스트 파일 에서 Python 데이터 구 조 를 분석 하 는 방법 도 배 울 것 입 니 다.
본 고 는 백락 온라인-왼손 의 영혼 번역 자thegeekstuff
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.