정규식(regex)을 사용해 문자열에서 최대 숫자 값을 추출하는 가장 간단한 방법은 다음 두 단계로 진행하는 것입니다.
- re 모듈을 활용해 문자열에 포함된 모든 숫자를 추출합니다.
- 추출한 숫자들 중 최댓값을 찾습니다.
예제 입력
예를 들어 아래와 같은 입력 문자열이 있다고 가정해 보겠습니다.
"이 도시에는 121005명이 살고 있으며, 인근 도시에는 1587469명, 먼 곳의 도시에는 18775994명이 살고 있습니다."
이 문자열에서 얻어야 하는 출력 결과는 다음과 같습니다.
18775994
정규식 패턴 이해하기
여기서는 "\d+" 정규식 패턴을 사용합니다. \d는 숫자 한 자리(digit)를 의미하고, 그 뒤에 붙는 플러스(+) 기호는 연속된 숫자 중 가장 긴 문자열, 즉 하나의 완전한 숫자 전체를 매칭하도록 해줍니다.
re 모듈로 구현하기
파이썬의 re 패키지를 사용하면 다음과 같이 간단하게 구현할 수 있습니다.
import re
# 문자열에서 모든 숫자 값을 추출합니다.
occ = re.findall("\d+", "There are 121005 people in this city, 1587469 in the neighbouring city and 18775994 in a far off city.")
# 추출한 숫자 값을 문자열에서 정수(int)로 변환합니다.
num_list = map(int, occ)
# 최댓값을 찾아 출력합니다.
print(max(num_list))실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
18775994
코드 동작 원리 정리
- re.findall(): 패턴과 일치하는 모든 부분을 리스트 형태로 반환합니다. 여기서는 ["121005", "1587469", "18775994"]가 반환됩니다.
- map(int, ...): findall의 결과는 문자열이므로, max()로 올바르게 비교하기 위해 정수형으로 변환해야 합니다.
- max(): 변환된 정수 리스트에서 가장 큰 값을 반환합니다.
만약 음수나 소수점 숫자까지 처리해야 한다면 패턴을 -?\d+\.?\d*처럼 확장하여 활용할 수 있습니다.