python 학습 노트 (11) - 정규 표현 식

2884 단어
1. 기초 지식:
\ d 숫자 와 일치 합 니 다.
\ w 는 알파벳 이나 숫자 와 일치 합 니 다.
임의의 문자 일치
* 임의의 문자 표시
+ 한 글자 이상 표시
? 문자
{n} 은 n 자, {n, m} 은 n - m 자 를 나타 낸다
\ s 는 빈 칸 (Tab 등 공백 문자 포함) 과 일치 하 는 것 을 표시 합 니 다. \ s + 는 최소한 빈 칸 을 표시 합 니 다.
[0 - 9a - zA - Z \] 숫자, 알파벳 또는 밑줄 과 일치 할 수 있 습 니 다.
[0 - 9a - zA - Z \] + 최소한 하나의 숫자, 알파벳 또는 밑줄 로 구 성 된 문자열 과 일치 할 수 있 습 니 다.
[a - zA - Z \] [0 - 9a - zA - Z \ \] * 는 알파벳 이나 밑줄 로 시작 한 다음 에 숫자, 알파벳 또는 밑줄 로 구 성 된 문자열 을 임의로 연결 할 수 있 습 니 다.
[a - zA - Z \] [0 - 9a - zA - Z \ \] {0, 19} 앞 에 한 글자 + 뒤 에는 최대 19 글자 만 제한 합 니 다.
A | B 는 A 또는 B 와 일치 할 수 있 습 니 다.
줄 의 첫머리
$표시 줄 의 끝
메모: 특수 문 자 는 \ \ 로 전 의 를 해 야 하지만 python 의 r 접 두 사 를 사용 하면 전의 문 제 를 고려 하지 않 아 도 됩 니 다.
2. re 모듈
match 방법 은 일치 하 는 지 여 부 를 판단 합 니 다. 일치 하 는 데 성공 하면 Match 대상 을 되 돌려 줍 니 다. 그렇지 않 으 면 None 으로 돌아 갑 니 다.
import re

test='010-12345'
if re.match(r'^\d{3}-\d{5}$', test):
	print 'ok'
else:
	print 'failed'

3. 절 분 된 문자열
정규 표현 식 으로 문자열 을 자 르 는 것 이 더 유연 합 니 다.
import re

#      ['a', 'b', '', '', 'c']
print 'a b   c'.split(' ')

#     ,          ['a', 'b', 'c', 'd']
print re.split(r'[\s\,]+', 'a,b, c  d')

#     ,              ['a', 'b', 'c', 'd']
print re.split(r'[\s\,\;]+', 'a,b;; c  d')

조 를 나누다
정규 표현 식 은 하위 문자열 을 추출 하 는 기능 이 있 습 니 다. () 를 사용 하여 추출 할 그룹 (group) 을 표시 합 니 다.
다음: 일치 하 는 문자열 에서 지역 번호 와 로 컬 번 호 를 추출 할 수 있 습 니 다.
import re

m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
print m.group(0) # '010-12345'
print m.group(1) # '010'
print m.group(2) # '12345'

탐욕 일치
정규 일치 기본 값 은 탐욕 일치 입 니 다. 즉, 가능 한 한 많은 문자 입 니 다.
import re

print re.match(r'^(\d+)(0*)$', '102300').groups()
# ('102300', '')
\ d + 탐욕 으로 인해 뒤의 0 을 모두 일치 시 켰 습 니 다. 결과 0 * 은 빈 문자열 만 일치 할 수 있 습 니 다.
반드시 \ d + 비 탐욕 매 칭 을 사용 해 야 합 니 다. 즉, 가능 한 한 적 게 매 칭 해 야 뒤의 0 을 매 칭 하고 개 를 추가 할 수 있 습 니까?탐욕
re.match(r'^(\d+?)(0*)$', '102300').groups()   # ('1023', '00')
번역
python 에서 정규 표현 식 을 사용 할 때 re 모듈 내부 에서 두 가지 일 을 합 니 다.
1. 정규 문자열 자체 가 합 법 적 이지 않 으 면 오류 가 발생 합 니 다.
2. 컴 파일 된 정규 로 문자열 일치 하기
만약 에 하나의 정규 가 여러 번 반복 적 으로 사용 해 야 한다 면 효율 적 인 고려 에서 우 리 는 사전 컴 파일 을 할 수 있 고 다음 에 사용 하면 컴 파일 하지 않 아 도 된다.
import re
#   :
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')

#   :
re_telephone.match('010-12345').groups() #('010', '12345')
re_telephone.match('010-8086').groups() #('010', '8086')

좋은 웹페이지 즐겨찾기