■ 정규 표현식 (Regular Expression)
- 정규표현식은 복잡한 문자열을 처리할 때 사용하는 기법
[사례] 주민등록번호를 포함하고 있는 텍스트에서 주민등록번호 뒷자리를 * 문자로 변경 - 주민등록번호 문자열은 주민등록번호 형식인지 조사한다. |
data = """
park 800904-1234567
kim 841204-1015478
"""
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
data = """
park 800904-1234567
kim 841204-1015478
"""
pat = re.compile("(\d{6})[-]\d{7}")
print(pat.sub(r”\1-*******", data))
■ 메타 문자
- 정규 표현식에 사용되어 지는 특별한 의미를 갖는 문자
■ 문자 클래스 []
- [] 안에 포함된 문자들 중 하나와 매치 여부를 확인한다.
정규식 |
문자열 |
매치 여부 |
[abc] |
a |
Yes |
before |
Yes |
dude |
No |
- 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위(from-to)를 의미한다.
[a-c] -> [abc], [0-5] -> [012345]와 동일
- 문자 클래스 안에 ^ 메타 문자가 사용되면 not의 의미를 갖는다. [^0-9]는 숫자가 아닌 문자만 매치된다.
- ^ 메타 문자가 [] 밖에 사용되면 특정 문자로 시작하는지 판단
■ 자주 사용하는 문자 클래스
- 자주 사용하는 정규식은 별도의 표기법으로 표현할 수 있다.
정규 표현식 |
설명 |
\ |
정규 표현식에서 사용하는 문자 그대로 표현하려면 앞에 \를 붙임 예) \+, \* |
\d |
숫자와 매치, [0-9]와 동일한 표현식 |
\D |
숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식 |
\s |
공백문자(space, tab)와 매치, [ \t\n\r\f\v]와 동일한 표현식 |
\S |
공백문자가 아닌 것과 매치 [^ \t\n\r\f\v]와 동일한 표현식 |
\w |
문자+숫자와 매치, [a-zA-Z0-9]와 동일한 표현식 |
\W |
문자+숫자가 아닌 문자와 매치, [^a-zA-Z0-9]와 동일한 표현식 |
댓글 영역