본문 바로가기

Programming/Python

[Python] 정규표현식(Regular Expressions)(1)

정규표현식(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

https://wikidocs.net/4308

 

07-2 정규 표현식 시작하기

[TOC] ## 정규 표현식의 기초, 메타 문자 정규 표현식에서 사용하는 메타 문자(meta characters)에는 다음과 같은 것이 있다. > ※ 메타 문자란 원래 ...

wikidocs.net