정규표현식(Regular Expressions)
- 복잡한 문자열을 처리할 때 사용하는 기법
- 예를 들어, 주민등록번호의 뒷자리를 * 문자로 변경하는 문제
import re
data = """
park 800905-1049118
kim 700905-1059119
"""
pat = re.compile("(\d{6})[-]\d{7}")
print(pat.sub("\g<1>-*******",data))
# 결과값
# park 800905-*******
# kim 700905-*******
정규표현식의 기초, 메타문자
메타문자 - 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자
문자 클래스 [ ] → [ ] 사이의 문자들과 매치
- [abc] → a, b, c 중 한개의 문자와 매치
- a : 매치(a있으므로), before : 매치(b있으므로), dude : 매치X(a,b,c 중 하나라도 미포함)
하이픈( - ) 사용 문자 클래스 → 두 문자 사이의 범위 (From - To)
- [a-zA-Z] : 알파벳 모두
- [0-9] : 숫자
- [0-5] : [012345]
문자 클래스 [ ] 안 ^ → 반대(not) 의미
- [^0-9] : 숫자가 아닌 문자만 매치
**[자주 사용하는 문자 클래스] → [0-9] [a-zA-Z]
\d | 숫자와 매치, [0-9] 같은 의미 |
\D | 숫자가 아닌 것과 매치, [^0-9] |
\s | whitespace 문자와 매치 [ \t\n\r\f\v]와 같은 의미, 맨 앞은 공백 문자 의미(\t : 탭, \n : 줄 바꿈) |
\S | whitespace 문자가 아닌 것과 매치 [^ \t\n\r\f\v] |
\w | 문자 + 숫자와 매치, [a-zA-Z0-9_]와 동일 |
\W | 문자 + 숫자가 아닌 문자와 매치 [^a-zA-Z0-9_] |
Dot ( . )
- 줄바꿈 문자 \n 을 제외한 모든 문자와 매치
a.b | a + 모든문자 + b , a와 b 사이에 어떤 문자가 들어가도 모두 매치 |
aab | 매치 |
a0b | 매치 |
abc | 매치 X (a와 b 사이에는 어떤 문자라도 하나는 있어야 되기 때문) |
a[.]b | a + Dot(.)문자 + b a.b 매치 (a0b 매치X) 문자 클래스 [ ]에 있는 . 은 모든문자가 아닌 . 그대로를 의미 |
반복 ( * ) - 바로 앞 문자 0번 이상부터 무한대 반복
ca*t | 바로 앞 문자 a가 (0번 이상 무한대로) 반복 가능 |
ct | 매치 (a가 0번 반복되어 매치) |
cat | 매치 (a가 0번 이상, 1번 반복되어 매치) |
caat | 매치 (a가 0번 이상, 3번 반복되어 매치) |
반복 ( + ) - 바로 앞 문자 최소 1번 이상 반복
ca+t | c + a(1번 이상 반복) + t |
ct | 매치X (a가 0번 반복되었기 때문에) |
cat | 매치 |
caaat | 매치 |
반복 ({m, n}, ?) - 반복 횟수 고정
{3,} | 반복 횟수 3 이상 |
{,3} | 반복 횟수 3 이하 |
생략된 m (,n) | 0을 의미 |
생략된 n (m,) | 무한대를 의미(2억개 미만) |
{1,} + 와 동일 (1이상 반복) | {0,} * 와 동일 |
1. {m}
ca{2}t | c + a(반드시 2번 반복) + t |
cat | 매치 X (a가 1번만 반복되어 매치X) |
caat | 매치 (a가 2번 반복) |
2. {m, n}
ca{2,5}t | c + a(2~5회 반복) + t |
cat | 매치X (a가 1번만 반복되어 매치X) |
caat | 매치 (a가 2번 반복되어 매치) |
caaaaat | 매치 (a가 5번 반복되어 매치) |
3. ? ({0, 1}와 같은 의미)
ab?c | a + b(있어도 되고 없어도 된다) + c |
abc | b가 1번 사용되어 매치 |
ac | b가 0번 사용되어 매치 |
reference
07-2 정규 표현식 시작하기
[TOC] ## 정규 표현식의 기초, 메타 문자 정규 표현식에서 사용하는 메타 문자(meta characters)에는 다음과 같은 것이 있다. > ※ 메타 문자란 원래 ...
wikidocs.net
'Programming > Python' 카테고리의 다른 글
[Python] 정규표현식(Regular Expressions) - re 모듈 (2) (0) | 2022.06.07 |
---|---|
[Python] 유니코드 활용하여 문자열을 숫자로 변환하기 (0) | 2022.04.01 |
[Python] set(집합) 자료형 정리 (0) | 2022.03.20 |
[Python] 2차원 배열(리스트) 초기화, 입력 받기 (0) | 2022.03.17 |