728x90

메타 문자
| 메타 문자 | 설명 |
| . | 개행 문자 (\n)를 제외한 모든 문자와 매칭 |
| ^ | 문자열의 제일 처음과 일치함 |
| $ | 문자열의 제일 마지막과 일치함 |
| * | * 바로 앞의 문자가 0번 이상 무한대로 반복될 수 있음 |
| + | + 바로 앞의 문자가 1번 이상 무한대로 반복될 수 있음 |
| ? | 바로 앞의 문자가 0번이나 1번 있을 경우 |
| \ | 이스케이프 |
| | | or 조건 |
| ( ) | 그룹핑 문자 |
| { } | 앞의 문자의 반복 횟수 조건 제한 |
| [ ] | 문자 집합 |
' . '
| 사용법 | 설명 | 매칭 O | 매칭 X | |
| a.b | c와 b 사이 문자 하나 | aab, a0b, a*b, a.b | ab, a\nb | |
- 개행 문자를 제외한 문자 하나를 뜻함. (숫자 포함, 특수문자 포함, 띄어쓰기 포함)
- re.DOTALL 옵션을 줄 경우 개행 문자와도 매치
' * '
| 사용법 | 설명 | 매칭 O | 매칭 X | |
| ca*t | c와 t 사이 'a' 0개 이상 | ct, cat, caat, caaat | cut, coat | |
| c(oa)*t | c 와 t 사이 'oa' 0개 이상 | ct, coat, coaoat | cot, cat, coaat | |
- 0개 이상이 핵심. (없어도 됨)
' + '
| 사용법 | 설명 | 매칭 O | 매칭 X | |
| ca+t | c 와 t 사이 'a' 1개 이상 | cat, caat, caaat | ct, cut, coat | |
| c(oa)+t | c 와 t 사이 'oa' 1개 이상 | coat, coaoat | ct, cot, cat | |
- 1개 이상. (무조건 있어야 함)
' { } '
| 사용법 | 설명 | 매칭 O | 매칭 X | |
| ca{2}t | c와 t 사이 'a' 두번 | ct, cat, caaat | caat | |
| ca{2, 5}t | c와 t 사이 'a' 2~5회 | caat, caaaaat | ct, cat, caaaaaat | |
| c(oa){1, 2}t | c와 t 사이 'oa 1~2회 | coat, coaoat | ct, coaoaoat | |
' ? '
| 사용법 | 설명 | 매칭 O | 매칭 X | |
| ca?t | c와 t 사이 a가 있어도 없어도 된다 | ct, cat | caat, cbt | |
| c(oa)?t | c와 t 사이 'oa'가 있어도 없어도 된다 | ct, coat | coaoat, cot, cat | |
- 0 또는 1회 개념
' | '
| 사용법 | 설명 | 매칭 O | 매칭 X | |
| c(a|u)t | c와 t 사이 a나 o가 들어와야함 | cat, cot | ct, coat, caot | |
| co|at | 'co' 혹은 'at' | co, at | cat, cot | |
' ^ '
| 사용법 | 설명 | 매칭 O | 매칭 X | |
| ^abc | abc로 시작 | abc, abcde, | ab, abde | |
| ^ab?c | ac나 abc로 시작 | ac, acd, abc, abcd | abbc | |
' $ '
| 사용법 | 설명 | 매칭 O | 매칭 X | |
| cde$ | cde로 끝나는 글자 | cde, abcde | abde | |
' [ ] '
| 사용법 | 설명 | 매칭 O | 매칭 X | |
| [a] | 'a'가 들어가있는 모든 문자열 | a, aa, cat, coat | ct, b | |
| [ab] | 'a'나 'b'가 들어가있는 모든 문자열 | a, b, cat, cab | at, c | |
| [a-z] | 알파벳 소문자가 포함되어 있는 문자열 | a, b, c, d, CaT | A, B, C, CAT | |
| [가-힣] | 완성형 한글 | 가, 가나, 힣 | ㄱ, ㅌ | |
| [a-zA-z0-9] | 알파벳 소문자와 숫자 | a, A, 0, af0fcf3158 | ***** | |
| [^a] | 'a'를 제외한 모든 문자 포함 | b, cat, coat | a, aa, aaa, aaaa | |
| [^0-9] | 숫자를 제외한 모든 문자 | a, a1, a2 | 010, 0, 9 | |
| [^abc] | a,b,c를 제외한 모든 문자 | d, abcd | a, abc | |
' \ '
| 이스케이프 | 설명 | 같은 의미의 정규표현식 / 예시 | |
| \A | 문자열의 처음과 매칭 (re.MULTILINE 사용시 개행 구분 X) | ^ (re.MULTILINE 옵션 사용 X의 경우) | |
| \Z | 문자열의 마지막과 매칭 (re.MULTILINE 사용시 개행 구분 X) | $ (re.MULTILINE 옵션 사용 X 경우) | |
| \b | 단어 구분자. (공백) | er\b : never \ber\b : er |
|
| \B | 단어 구분자를 제외한 전부 | er\B : erp \Ber\B : verb |
|
| \d | 숫자 (digit) | [0-9] | |
| \D | 숫자가 아닌 문자 | [^0-9] | |
| \c_ | _로 표시된 제어 문자를 찾음 | \cc : ctrl + c \cs : ctrl + s |
|
| \f | 용지 공급 문자 | \xOc, \cL | |
| \n | 개행 문자 | \xOa, \cJ | |
| \r | 캐리지 리턴 문자 | \xOd, \cM | |
| \s | 공백 문자 (공백, 탭, 용지공급 등..) | [\f\n\r\t\v] | |
| \S | 공백이 아닌 문자 | [^\f\n\r\t\v] | |
| \t | 탭 문자 | \x09, \cL | |
| \v | 수직 탭 문자 | \x09, \cK | |
| \w | 밑줄을 비롯한 모든 문자 | [A-Za-z0-9_] | |
| \W | 공백, _ 를 제외한 특수 문자 등.. | [^A-Za-z0-9_] | |
| \x_ | 16진수 문자 _ (ASXII 코드) | \x41 : A \x041 : \x04 & 1 |
|
| \Z | 문자열 끝에만 일치 | ||
- \b 는 문자열 안에서만 백스페이스
' ( ) '
import re
input = '홍길동 010-1234-5678 홍길동 010'
p1 = re.compile(r'(\w+)\s+(\d+)[-](\d+)[-](\d+)')
m1 = p1.search(input)
print(m1.group(1), m1.group((2)))
print()
p2 = re.compile(r'(?P<name>\w+)\s+(\d+)[-](\d+)[-](\d+)')
m2 = p2.search(input)
print(m2.group('name'))
p3 = re.compile(r'(?P<name>\w+)\s+(\d+)[-](\d+)[-](\d+)\s+(?P=name)\s+\2')
m3 = p3.search(input)
print(m3)

- ()으로 특정 정규식을 감싸면 그룹이 됨
- 출된 그룹은 group(idx)로 접근할 수 있음
- 추출된 그룹을 인덱스(\1, \2, \3...)로 재참조 할 수 있음 (예시 : 그룹 + " " + 그룹과 동일한 단어)
- (\w+) 등 대신 (?P<그룹명>\w+)를 하면 ㄱ,룹에 이름을 붙일 수 있음.
- (?P=그룹명) 으로 정규식 안에서 재참조 가능
| 용법 | 설명 | 비고 | |
| (...) | 그룹. '\숫자'로 재참조 가능 | ||
| (?aiLmsux) | a, i, L, m, s, u, x 중 선택. re.compile()에 들어가는 플래그를 대신 전달 |
re.A : ASCII만 일치 re.I : 케이스 무시 re.L : 로케일 종속 re.M : 여러 줄 re.S : 점이 모든 문자와 일치 re.U : 유니코드 일치 re.X : 상세모드 |
|
| (?:...) | 일반 괄호와 같지만 '\숫자'로 재참조할 수 없음 | ||
| (?aiLmsux-imsx:...) | 정규식의 일부에 대해 플래그 조건 제거 가능 | ||
| (?P<그룹명>...) | 일반 괄호와 같지만 그룹명을 통해 재참조 가능 | ||
| (?P=그룹명) | 이름이 있는 그룹에 대한 역참조 | ||
| (?#...) | 주석 | ||
| (?=...) | 문자열을 소비하지 않고 뒤에 일치가 있으면 일치 | abc(?=def) : 뒤에def가 있을 때만 abc를 일치 | |
| (?!...) | 문자열을 소비하지 않고 뒤에 일치가 없으면 일치 | abc(?!def) : 뒤에 def가 없을 때만 abc를 일치 | |
| (?<=...) | 앞에서 일치가 있으면 일치 | (?<=abc)def : 앞에 abc가 있을 때만 def를 일치 | |
| (?<!...) | 앞에서 일치가 없으면 일치 | (?<!abc)def : 앞에 abc가 없을 때만 def를 일치 | |
| (?(아이디/그룹명)yes-pattern)|no-pattern | 주어진 아이디나 그룹명이 있으면 yes-pattern과 일치 없으면 no-pattern과 일치 |
||
참조
- 파이썬 공식문서
- 불곰 님의 블로그
- 점프 투 파이썬
반응형
'Languages > Python' 카테고리의 다른 글
| [파이썬 101] map 함수 (Iterator, Iterable) (0) | 2022.06.03 |
|---|---|
| [파이썬 101] re 모듈 (함수, 플래그, 일치 객체) (0) | 2022.05.30 |
| [파이썬 101] 문자열 매칭 메소드 (in, find, rfind, index, rindex startswith, endswith) (0) | 2022.05.28 |
| [파이썬 101] zip() (0) | 2022.05.24 |
| [파이썬 101] 해시(Hash) (0) | 2022.05.24 |