한 번 보면 알 수 있 는 python 정규 표현 식 사용 안내
16240 단어 python
정규 표현 식 은 합 격 된 프로그래머 의 필수 적 인 기본 기술 중 하나 로 서 그 유용 성 은 두말 할 필요 도 없다.그런데 왜 파악 하기 가 힘 들 고 사용 하기 도 어 려 울 까?이 글 은 Python 정규 표현 식 을 어떻게 사용 하 는 지 한 번 에 보 여 줄 것 이다.
1. 정규 표현 식 의 구성
Python 의 정규 표현 식 을 어떻게 사용 하 는 지 소개 할 때, 우 리 는 먼저 정규 표현 식 의 각종 기능 과 그 구성 형식 이 어떠한 지 알 아야 한다.
정규 표현 식 은 비구 조 화 된 텍스트 에서 우리 가 원 하 는 내용 을 추출 할 수 있다. 그 본질은 패턴 일치 이 고 지능 화 를 나타 내 는 최초의 수단 이다. 현 재 는 자동화 처리 정보의 절차 에 광범 위 하 게 응용 되 었 다. 파충류 부터 인공지능 까지 어디 에 나 있 고 그 수요 도 상당 하 다.
정규 표현 식 의 작성 을 언급 하 자 N 여 블 로그 에 신기 한 사이트 가 언급 되 었 다.http://www.txt2re.com/이 사 이 트 는 저도 예전 에 사용 한 적 이 있 습 니 다. 만약 에 정규 표현 식 을 할 줄 모 르 고 게 으 름 을 피 우 고 자동 으로 생 성 하려 면 이 사이트 에서 가장 복잡 한 상황 을 복사 해서 붙 여 넣 어야 합 니 다.그리고 일치 하고 싶 은 내용 을 시각 적 인 클릭 조합 을 통 해 원 하 는 정규 표현 식 을 자동 으로 생 성 할 수 있 습 니 다.
그러나 유감스럽게도 이 사 이 트 는 현재 이미 열 리 지 않 는 다.핵심 기술 이 자기 손 에 달 려 있다 는 것 이 사실 이라는 것 을 보 여 주 는 것 이다.이제 정규 표현 식 을 어떻게 작성 해 야 하 는 지 봅 시다.다음은 정규 표현 식 을 진행 하 는 일반적인 절 차 를 사용 합 니 다. 서로 다른 언어 는 그 실현 방법 이 완전히 같 지 않 습 니 다. 우 리 는 오늘 주로 python 을 사용 하여 정규 표현 식 을 진행 하 는 세 가지 일치 방식 에 초점 을 맞추어 우리 가 원 하 는 목표 부분 을 얻 고 다른 방법 에 대해 서 는 나중에 설명 하 겠 습 니 다.
만약 우리 가 python 을 사용 하여 정규 표현 식 정규 를 진행한다 면, 우 리 는 주로 몇 가지 절 차 를 거 친다.
3. 정규 표현 식 작성
정규 표현 식 을 만 드 는 것 이 핵심 입 니 다. 우리 의 생각 에 맞 는 표현 식 을 어떻게 만 듭 니까?우 리 는 다음 두 부분 을 소개 하여 구축 합 니 다.
그대로 있 는 단어 라 는 부분 은 우리 가 필요 로 하 는 것 이 아니 라 우리 가 필요 로 하 는 내용 의 중간 부분 만 남아 있다.그대로 있 는 단 어 는 그대로 베껴 쓰 고, 유 난 히 형식 을 늘 리 지 마라.
일치 하 는 부분 을 추출 하고 싶 은 내용 을 정규 표현 식 으로 표현 합 니 다. 한 부분 은 우리 가 일치 하 는 문자 입 니 다. 예 를 들 어:
\ w 는 알파벳 숫자 와 밑줄 이 일치 합 니 다 \ \ W 는 비 알파벳 숫자 와 밑줄 이 일치 합 니 다 \ \ s 는 임의의 공백 문자 와 일치 합 니 다. 값 은 [\ t \ r \ f] 와 같 습 니 다. \ S 는 임의의 비 빈 문자 와 일치 합 니 다 \ d 는 임의의 숫자 와 일치 합 니 다. \ D 는 임의의 비 숫자 와 일치 합 니 다 \ A 매 칭 문자열 시작 \ Z 매 칭 문자열 이 끝 납 니 다. 줄 이 바 뀌 기 전의 끝 문자열 만 일치 합 니 다. \ \z 일치 문자열 이 끝 났 습 니 다. \ G 는 완 료 된 위치 와 일치 합 니 다. \b. 단어 경계 와 일치 합 니 다. 즉, 단어 와 빈 칸 의 위 치 를 말 합 니 다.예 를 들 어 'er \ b' 는 'never' 의 'er' 와 일치 할 수 있 지만 'verb' 의 'er' 와 일치 할 수 없습니다. \B 는 단어 가 아 닌 경계 와 일치 합 니 다. 'r \ B '는' verb '의' er '와 일치 하지만' never '의' er '와 일치 할 수 없습니다.t, 등. 줄 바 꿈 문자 와 일치 합 니 다.탭 문자 와 일치 합 니 다.n 번 째 그룹의 내용 과 일치 합 니 다. \10. n 번 째 그룹의 내용 과 일치 합 니 다. 일치 하면.그렇지 않 으 면 8 진 문자 코드 의 표현 식 을 말 합 니 다.
다른 하 나 는 일치 하 는 모드 입 니 다. 우리 가 어떻게 일치 하 는 지 결정 합 니 다.
^ 문자열 의 시작 $문자열 의 끝 과 일치 합 니 다.임의의 문자 와 일치 합 니 다. 줄 바 꿈 자 를 제외 하고 re. DOTALL 태그 가 지정 되 었 을 때 줄 바 꿈 자 를 포함 한 임의의 문자 와 일치 할 수 있 습 니 다.[...] 문 자 를 표시 하 는 데 사 용 됩 니 다. 단독 목록: [amk] 은 'a', 'm' 또는 'k' [^..] 에 없 는 문자 입 니 다. [^ abc] 는 a, b, c 를 제외 한 문자 와 일치 합 니 다.re * 0 개 이상 의 표현 식 과 일치 합 니 다.re + 1 개 이상 의 표현 식 과 일치 합 니 다.re? 앞의 정규 표현 식 에서 정 의 된 0 개 또는 1 개의 세 션 과 일치 합 니 다. 탐욕 적 이지 않 은 방식 re {n} 은 n 개의 앞 표현 식 과 정확하게 일치 합 니 다.예 를 들 어 o {2} 은 "Bob" 의 "o" 와 일치 할 수 없 지만 "food" 의 두 o 와 일치 할 수 있 습 니 다.re {n,} 은 n 개의 앞 표현 식 과 일치 합 니 다.예 를 들 어 o {2,} 은 "Bob" 의 "o" 와 일치 할 수 없 지만 "fooood" 의 모든 o 와 일치 할 수 있 습 니 다."o {1,}" 은 "o +" 와 같다."o {0,}" 은 "o *" 와 같다.re {n, m} 은 n 에서 m 회 까지 앞의 정규 표현 식 으로 정 의 된 세 션 과 일치 합 니 다. 탐욕 방식 a | b 는 a 또는 b (re) 와 일치 하 는 정규 표현 식 을 그룹 으로 나 누고 일치 하 는 텍스트 (? imx) 정규 표현 식 은 세 가지 선택 가능 한 표 지 를 포함 합 니 다: i, m 또는 x.괄호 안의 영역 에 만 영향 을 줍 니 다.(? - imx) 정규 표현 식 은 i, m 또는 x 로 고 를 닫 습 니 다.괄호 안의 영역 에 만 영향 을 줍 니 다.(?: re) 는 유사 (...) 하지만 한 그룹 (? imx: re) 을 표시 하지 않 습 니 다. 괄호 에 i, m, 또는 x 선택 표지 (? - imx: re) 를 사용 하지 않 습 니 다. 괄호 에 i, m, 또는 x 선택 표지 (? \ #...) 주석 을 사용 하지 않 습 니 다. (? = re) 앞에서 긍정 적 인 정의 부 호 를 사용 합 니 다.정규 표현 식 이 포함 되 어 있 으 면 현재 위치 가 성공 적 으로 일치 할 때 성공 하고 그렇지 않 으 면 실패 합 니 다.그러나 표현 식 이 시도 되 었 을 때 일치 하 는 엔진 이 전혀 향상 되 지 않 았 습 니 다.모드 의 나머지 부분 은 정의 문자 의 오른쪽 을 시도 해 야 합 니 다.(?! re) 앞 에 부정 정의 부 호 를 향 해.긍정 적 인 정의 와 반대;함 유 된 표현 식 이 문자열 의 현재 위치 와 일치 하지 않 을 때 성공 (? > re) 과 일치 하 는 독립 모드 로 거 슬러 올 라 가지 않 습 니 다.
두 가 지 를 조합 하면 우리 가 원 하 는 결 과 를 완성 할 수 있 습 니 다. 비록 여기 서 많이 열거 되 었 지만 우리 가 자주 사용 하 는 것 은 바로 그 몇 가지 입 니 다. 정규 표현 식 의 간단 한 구분 은 정규 표현 식 을 원 문자, 반 의, 양사 와 게 으 름 한정 어로 나 눌 수 있 습 니 다.나 는 뒷부분 에서 실례 를 하나 제시 할 것 이다.정규 표현 식 을 작성 한 후에 아래 함 수 를 사용 하여 일치 하 는 템 플 릿 을 얻 습 니 다.
re.compile(pattern[, flags])
4. 일치 하 는 방식
정규 표현 식 이 일치 하 는 방식 은 주로 3 가지
match
, search
와 findall
가 있다.영 어 를 알 면 차이 점 을 알 수 있 습 니 다. 여기 서 앞의 두 가 지 는 모두 단일 하 게 일치 하고 하나의 절차 만 일치 합 니 다. 일치 하 는 규칙 이 여러 개 있 으 면 첫 번 째 결 과 를 되 돌려 주 고 findall
후보 에 맞 는 모든 것 을 일치 시 킵 니 다.앞의 두 가지 차 이 는 match
처음부터 일치 해 야 한 다 는 것 이다. 즉, startwith
와 차이 가 많 지 않 은 효과 이 고 search
는 임 의 위치 에서 일치 할 수 있다 는 것 이다.다음은 세 가지 방법의 매개 변 수 를 살 펴 보 겠 습 니 다. 그 중에서
pattern
우리 에 게 제 정 된 정규 표현 식 입 니 다. string
우리 가 일치 해 야 할 문자열 입 니 다. flags
은 일치 하 는 패턴 을 표시 합 니 다.re.match(pattern, string, flags=0)
re.search(pattern, string, flags=0)
findall(string[, pos[, endpos]])
그래서 우리 가 방식 을 선택 할 때 다음 과 같은 몇 가지 절차 가 있다.
findall
match
search
일치 결과 전 시 는 주로 다음 과 같은 네 부분 으로 구성 되 어 있 습 니 다.
group([group1, …]) , , group() group(0);
start([group]) ( ), 0;
end([group]) ( +1), 0;
span([group]) (start(group), end(group))。
예 를 들 어 아래 의 이 예 는 우리 가 이 네 부분 을 어떻게 호출 하 는 지 를 보 여 준다.
>>>import re
>>> pattern = re.compile(r'\d+') #
>>> m = pattern.match('one12twothree34four') # ,
>>> print m
None
>>> m = pattern.match('one12twothree34four', 2, 10) # 'e' ,
>>> print m
None
>>> m = pattern.match('one12twothree34four', 3, 10) # '1' ,
>>> print m # Match
<_sre.SRE_Match object at 0x10a42aac0>
>>> m.group(0) # 0
'12'
>>> m.start(0) # 0
3
>>> m.end(0) # 0
5
>>> m.span(0) # 0
(3, 5)
6. 간단 한 예 를 들다
더 좋 고 직관 적 이 며 이해 하기 쉬 운 방법 은 다음 과 같다. 방금 사용 한 디지털 색인 과 비교 하면 모든 일치 하 는 내용 을 의미 화하 여 코드 를 더욱 쉽게 이해 할 수 있다.
contactInfo = ' ( Nucleus (span 2 3) (rel2par span)'
pattern=re.compile(r'(?P\w+) \(span (?P\w+) (?P\w+)\) \(rel2par (?P\w+)\)' )
match = pattern.search(contactInfo)
print(match.group()) # Nucleus (span 2 3) (rel2par span)
print(match.group("nuclearity")) # Nucleus
print(match.group("start")) # 2
print(match.group("end")) # 3
print(match.group("relation")) # span
상술 한 예 에서 우 리 는 가장 직관 적 인 결 과 를 얻 을 수 있다. 우 리 는 이러한 결 과 를 우리 가 필요 로 하 는 데이터 구조 에 저장 하기 만 하면 된다.
7. 기타 보충 지식
7.1 자주 사용 하 는 형식 과 일치 합 니 다.
만약 우리 가 자주 사용 하 는 형식, 예 를 들 어 이름, 신분증, 메 일, 전화번호 등 과 일치 해 야 한다 면, 모두 기 존의 도구 가 직접 생 성 되 고, 우리 가 다시 작성 할 필요 가 없다.
7.2 일치 하 는 중국어 문자
만약 당신 이 단지 몇 개의 중국어 한자 와 일치 하고 싶다 면, 아래 의 정규 표현 식 을 사용 하 십시오.
[\u4E00-\u9FA5\\s]+ ,
[\u4E00-\u9FA5]+ ,
[\u4E00-\u9FA5]
여기에 더 완전한 중문 자 와 일치 하 는 방법 도 있다.
7.3 일부 특수 기호 와 일치
정규 표현 식 의 각종 괄호 의 용도 와 괄호 의 매 칭 을 어떻게 하 는 지.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.