텍스트에서 숫자만 추출하는 작업은 파이썬 데이터 분석에서 매우 자주 요구되는 기능입니다. 다행히 파이썬의 정규 표현식 라이브러리인 re 모듈을 사용하면 손쉽게 처리할 수 있습니다. 이 라이브러리를 활용하면 숫자에 해당하는 패턴을 정의하고, 문자열에서 패턴과 일치하는 부분을 부분 문자열 형태로 추출할 수 있습니다.
기본 예제: 숫자만 추출하기
아래 예제에서는 re 모듈의 findall() 함수를 사용합니다. 이 함수는 두 가지 인자를 받는데, 첫 번째는 추출하려는 패턴이고 두 번째는 패턴을 적용할 대상 문자열입니다.
다만 아래 예제의 결과에는 소수점(.)이나 음수(-) 기호는 포함되지 않고 오직 숫자만 반환된다는 점에 유의하세요.
import re
str=input("Enter a String with numbers: \n")
#Create a list to hold the numbers
num_list = re.findall(r'\d+', str)
print(num_list)
출력 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Enter a String with numbers: Go to 13.8 miles and then -4.112 miles. ['13', '8', '4', '112']
r'\d+' 패턴은 "숫자(digit) 하나 이상"을 의미하므로, '13.8'이라는 값도 '13'과 '8'로 분리되어 추출됩니다.
소수점과 부호까지 함께 추출하기
검색 패턴을 확장하면 소수점과 마이너스(-), 플러스(+) 부호까지도 함께 추출할 수 있습니다.
[-+]?: 부호(+ 또는 -)가 있으면 포함, 없어도 무방[.]?: 소수점(.)이 있으면 포함, 없어도 무방[\d]+: 하나 이상의 연속된 숫자
예제
import re
str=input("Enter a String with numbers: \n")
#Create a list to hold the numbers
num_list=re.findall(r'[-+]?[.]?[\d]+',str)
print(num_list)
출력 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Enter a String with numbers: Go to 13.8 miles and then -4.112 miles. ['13', '.8', '-4', '.112']
이처럼 정규식 패턴만 조금 수정하면 단순한 정수뿐 아니라 실수나 음수 등 다양한 형태의 숫자를 유연하게 추출할 수 있습니다.