Python 정규식으로 소수점을 제외한 숫자 추출하기
문자열에 포함된 숫자에서 소수점을 제외하고 정수 부분과 소수 부분을 각각 분리해야 하는 경우가 있습니다. 이럴 때 Python의 re 모듈과 정규식을 활용하면 간단하게 처리할 수 있습니다.
기본 예제 코드
다음 코드는 주어진 문자열에서 소수점을 기준으로 숫자를 분리하여 추출합니다.
>>> import re
>>> m = re.match(r"(\d+)\.(\d+)", "80.3196")
>>> m.groups()
('80', '3196')
정규식 패턴 분석
위 정규식 r"(\d+)\.(\d+)"의 구성 요소를 살펴보면 다음과 같습니다.
(\d+): 숫자(0~9)가 하나 이상 연속으로 나오는 부분을 캡처 그룹으로 지정합니다. 첫 번째 그룹은 소수점 앞의 정수 부분을 의미합니다.\.: 마침표(.)를 문자 그대로 매칭합니다. 정규식에서 마침표는 임의의 한 문자를 의미하는 메타 문자이므로, 역슬래시(\)로 이스케이프 처리해야 합니다.(\d+): 두 번째 캡처 그룹으로, 소수점 뒤의 소수 부분을 추출합니다.
결과 확인 방법
re.match() 함수는 문자열의 시작 부분에서 패턴과 일치하는지 검사하며, 매칭에 성공하면 Match 객체를 반환합니다. 이 객체의 groups() 메서드를 호출하면 캡처 그룹에 해당하는 값들을 튜플 형태로 얻을 수 있습니다.
위 예제에서는 ('80', '3196')이라는 결과가 반환되므로, 정수 부분과 소수 부분이 소수점 없이 각각 분리되어 추출된 것을 확인할 수 있습니다.
참고: re.findall 활용하기
문자열 전체에서 소수 형태의 숫자를 모두 찾고 싶다면 re.findall()을 사용할 수도 있습니다.
>>> re.findall(r"(\d+)\.(\d+)", "80.3196 12.5 7.89")
[('80', '3196'), ('12', '5'), ('7', '89')]
이처럼 정규식의 캡처 그룹을 적절히 활용하면 소수점을 제외한 숫자를 손쉽게 분리하고 추출할 수 있습니다.