정규표현식은 복잡한 문자열을 처리할 때 사용하는 기법으로, 파이썬뿐 아니라 C, 자바, 심지어 문서 작성 프로그램 등 문자열을 처리해야 하는 다양한 곳에서 활용할 수 있다
파이썬에서 정규표현식을 이용하려면 re 모듈을 사용한다
아래 주민번호에서 뒷자리 숫자를 *로 표현하기
홍길동의 주민번호는 800905-1049118 입니다.
그리고 고길동의 주민번호는 700905-1059119 입니다.
그렇다면 누가 형님일까요?
re를 사용하지 않고 문제를 풀기 위해서는 다음과 같은 순서로 프래그램 작성이 필요하다
data = """
홍길동의 주민번호는 800905-1049118 입니다.
그리고 고길동의 주민번호는 700905-1059119 입니다.
그렇다면 누가 형님일까요?
"""
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))
하지만 re 모듈을 사용하면 더욱 간단하게 문제를 해결할 수 있다
import re
data = """
홍길동의 주민번호는 800905-1049118 입니다.
그리고 고길동의 주민번호는 700905-1059119 입니다.
그렇다면 누가 형님일까요?
"""
pat = re.compile("(\d{6})[-]\d{7}")
print(pat.sub("\g<1>-*******",
출력 결과
🔰 re.compile("(\d{6})[-]\d{7}")
에서 사용한 (\d{6})[-]\d{7}
문자열을 정규표현식이라고 한다. 이는 숫자6 + 붙임표(-) + 숫자7
을 의미한다
즉, 풀이2는 주민 등록 번호화 일치하는 정규표현식을 사용해 re.compile() 함수
로 만든 객체에 sub() 함수를 사용하여
식과 일치하는 문자열 일부분을 *로 바꾸었다
📌 pat.sub("\g<1>-*******", data)
코드가 바로 data 문자열에서 주민 등록 번호 형식 문자열을 찾아 주민 등록 번호의 뒷부분만 ***로 바꾸는 역할을 한다.
여기서 \g<1>
은 정규표현식과 일치하는 문자열 중 첫 번째 그룹을 의미한다. 정규표현식에서 그룹을 지정하려면 (\d{6})
처럼 괄호로 묶으면 되는데, 여기서 첫 번째 그룹 \g<1>
은 주민 등록 번호 형식 문자열에서 바꾸지 않고 그대로 사용할 주민 등록 번호 앞부분을 뜻한