정규 표현식
정규 표현식이란?
정규 표현식 : 복잡한 문자열을 처리할 때 사용하는 기법
파이썬 말고도 다른 곳에서도 사용함
정규 표현식이 필요한 이유?
- example : 주민번호 뒷자리 7자리를 *로 변환하기
data = """
park 800905-1049118
kim 700905-1059919
"""
result = []
for line in data.split('\n'):
word_result = []
for word in line.split(" "):
if len(word) == 14 and word[:6].isdigit() and word[7:].isdigit():
word = word[:6] + "-" + "*******"
word_result.append(word)
result.append(" ".join(word_result))
print("\n".join(result))
- 위 코드를 정규 표현식을 이용해 간략하게 표현할 수 있다.
import re
pat = re.compile("(\d{6})[-]\d{7}")
print(pat.sub("\g<1>-*******", data))
정규 표현식의 메타 문자
.^$*+?{}[]|()
문자 클래스 []
문자클래스로 만들어진 정규식은 '[] 사이의 문자들과 매치'라는 의미를 갖는다.
정규표현식이 [abc]라면 이 표현식은 a, b, c 중 한 개의 문자와 매치를 뜻한다
ex) 정규식이 [abc]라고 할 때
"a"는 정규식과 일치하는 문자 a가 있으므로 매치
"before"는 정규식과 일치하는 문자 b가 있으므로 매치
"dude"는 정규식과 일치하는 문자가 아무것도 없으므로 매치되지 않음
하이픈(-)를 사용하면 범위(From ~ To)를 의미
[a-c]는 [abc]와 동일
[0-5]는 [012345]와 동일
[a-zA-Z] : 알파벳 모두
[0-9] : 숫자
^은 not(반대)를 의미
- [^0-9] : 숫자가 아닌 문자에 매칭
별도의 표기법이 있는 표현식
\d : [0-9]
\D : [^0-9]
\s : whiltespace(space와 tab과 같은 공백을 표현하는 문자)와 매치, [\t\n\r\f\v]와 동일
\S : \s의 반대
\w : 문자 + 숫자, 언더바_와 매치, [a-zA-Z0-9_]와 동일
\W : 공백문자나 특수문자에 매치(\w의 반대)
Dot(.)
줄바꿈 문자 \n을 제외한 모든 문자와 매치됨을 의미
example) a.b
"a + 모든문자 + b"와 같다
즉 a와 b 사이에 어떤 문자가 들어가도 모두 매치된다를 의미
[.]
.문자가 있어야만 매치됨을 의미
example) a[.]b
- a와 b 사이에 . 문자가 있어야 매치
반복(*)
반복을 의미하는 메타 문자
ex) ca*t
문자 바로 앞에 있는 a가 0번 이상 반복되면 매치
ct : "a"가 0번 반복되어 매치
cat : "a"가 1번 반복되어 매치
caaat : "a"가 3번 반복되어 매치
반복(+)
반복을 나타내는 메타 문자
* 와 다르게 최소 1번이상 반복될 때 사용
ex) ca+t
문자 바로 앞에 있는 a가 1번 이상 반복되면 매치
ct : "a"가 0번 반복되어 매치되지 않음
cat : "a"가 1번 반복되어 매치
caaat : "a"가 3번 반복되어 매치
반복({m, n}, ?)
{ } 메타 문자를 사용해 반복 횟수를 고정할 수 있다
{m, n} : 반복 횟수가 m부터 n까지 매치 할 수 있음
m 또는 n은 생략할 수 있음
{3, } : 반복 횟수가 3 이상
{, 3} : 반복 횟수가 3 이하
생략된 m : 0과 동일
생략된 n : 무한대를 의미
ex) ca{2}t
a가 2번 반복되면 매치
cat : "a"가 1번 반복되어 매치되지 않음
caat : "a"가 2번 반복되어 매치
ex) ca{2, 5}t
a가 2~5번 반복되면 매치
cat : "a"가 1번 반복되어 매치되지 않음
caat : "a"가 2번 반복되어 매치
caaaaat : "a"가 5번 반복되어 매치
반복은 아니지만, {0, 1}을 의미하는 ? 메타문자도 있음
ex) ab?c
b가 0~1번 사용되면 매치
abc : "b"가 1번 사용되어 매치
ac : "b"가 0번 사용되어 매치
즉, "b"가 있거나 없거나 둘다 매치 되는 경우
*, +, ? 메타 문자 모두 {m,n}으로 나타낼 수 있지만, 이해하기 쉽고 간결하게 메타 문자를 가능하면 사용하자
참조) Do it! 점프 투 파이썬 (박응용 지음), https://wikidocs.net (파이썬 계단밟기)
'Programming Language > Python' 카테고리의 다른 글
[Python] 24. GUI(Graphic User Interface) - tkinter (0) | 2023.11.08 |
---|---|
[Python] 22. 표준 라이브러리(Standard Library)(2) (0) | 2023.11.07 |
[Python] 21. 표준 라이브러리(Standard Library)(1) (0) | 2023.11.07 |
[Python] 20. 내장 함수(Built-in-function) (0) | 2023.11.07 |
[Python] 19. 예외처리(Exception Handling) (0) | 2023.11.07 |