문자열에서 숫자를 추출해야 하는 이유
데이터 처리 작업을 하다 보면 텍스트와 숫자가 섞여 있는 문자열에서 숫자만 골라내야 하는 경우가 자주 발생합니다. 예를 들어 로그 파일 분석, 사용자 입력 검증, 웹 스크래핑 결과 정리 등 다양한 상황에서 유용하게 쓰입니다. 파이썬(Python)에서는 문자열 객체가 기본 제공하는 isdigit() 메서드를 활용하면 아주 간단하게 숫자를 추출할 수 있습니다.
방법 1: 문자열에서 개별 숫자(자릿수) 하나씩 추출하기
문자열에 포함된 모든 숫자 문자를 한 글자씩 추출하려면 문자열을 반복(iteration)하면서 각 문자가 숫자인지 isdigit()으로 확인하면 됩니다.
>>> str1 = 'a34e 345 bcd 5he 78 xyz'
>>> for s in str1:
if s.isdigit():
print(s)
3
4
3
4
5
5
7
8위 코드의 동작 원리는 다음과 같습니다.
- for 루프: 문자열을 한 문자씩 순회합니다.
- isdigit() 검사: 해당 문자가 '0'~'9' 범위의 숫자인지 판별합니다.
- print 출력: 조건을 만족하는 숫자만 화면에 출력합니다.
결과를 보면 공백이나 알파벳은 모두 걸러지고, 숫자 문자만 순서대로 출력되는 것을 확인할 수 있습니다.
방법 2: 공백으로 구분된 단어 중 정수만 추출하기
단어들이 공백으로 구분되어 있는 문자열이라면 split() 메서드로 먼저 단어 단위로 나눈 뒤, 각 단어 전체가 숫자로만 이루어져 있는지 확인하는 방식이 더 적합합니다.
>>> str1 = 'h3110 23 cat 444.4 rabbit 11 2 dog'
>>> for s in str1.split():
if s.isdigit():
print(s)
23
11
2실행 결과 분석
- 'h3110' → 알파벳 'h'가 포함되어 있어 제외됩니다.
- '444.4' → 소수점(.)은 숫자가 아니므로
isdigit()이 False를 반환하여 제외됩니다. - '23', '11', '2' → 오직 숫자로만 구성된 정수이므로 정상적으로 추출됩니다.
참고: 소수까지 추출하고 싶다면?
isdigit()은 소수점을 인식하지 못하기 때문에 '444.4' 같은 실수도 걸러집니다. 소수를 포함한 숫자를 추출하려면 replace()를 활용하거나 정규표현식(re 모듈)을 사용하는 방법이 있습니다.
>>> import re >>> str1 = 'h3110 23 cat 444.4 rabbit 11 2 dog' >>> re.findall(r'\d+\.?\d*', str1) ['3110', '23', '444.4', '11', '2']
정리
파이썬에서 문자열의 숫자를 추출하는 핵심은 isdigit() 메서드입니다. 개별 자릿수가 필요하면 문자열을 그대로 순회하고, 정수 단위가 필요하면 split()으로 단어를 나눈 뒤 검사하면 됩니다. 소수나 더 복잡한 패턴이 필요하다면 정규표현식을 함께 활용하는 것이 좋습니다.