Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 문자열에서 숫자 추출하기: 정수부터 실수·음수까지

양의 정수만 추출하는 간단한 방법

문자열에서 양의 정수만 필요하다면 split()isdigit()을 조합하여 손쉽게 처리할 수 있습니다.

>>> s = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(x) for x in s.split() if x.isdigit()]
[23, 11, 2]

이 방법은 공백으로 구분된 각 단어가 순수하게 숫자로만 이루어진 경우에만 동작합니다. 따라서 444.4처럼 소수점이 포함되거나 음수 기호가 붙은 값은 자동으로 걸러집니다.

참고로 위 예제에서 변수 이름을 str로 사용하면 Python 내장 타입인 str을 덮어쓰게 되므로, 실제 코드에서는 s처럼 다른 이름을 사용하는 것이 좋습니다.

정규 표현식으로 모든 형태의 숫자 추출하기

소수, 음수 등 다양한 형태의 숫자를 추출하려면 re 모듈의 정규 표현식을 사용하는 것이 가장 좋은 선택입니다. 또한 추출한 값은 문자열 상태로 두기보다 intfloat로 변환해서 사용하는 것이 안전하고 편리합니다.

>>> import re
>>> [float(s) for s in re.findall(r'-?\d+\.?\d*', 'he33.45llo -42 I\'m a 32 string 30')]
[33.45, -42.0, 32.0, 30.0]

정규 표현식 패턴 해석

위 예제에서 사용한 패턴 r'-?\d+\.?\d*'는 다음과 같이 구성됩니다.

  • -? — 선택적으로 나타나는 음수 부호
  • \d+ — 하나 이상의 연속된 숫자(정수부)
  • \.? — 선택적으로 나타나는 소수점
  • \d* — 소수점 뒤에 오는 0개 이상의 숫자(소수부)

덕분에 33.45, -42, 32, 30처럼 정수·실수·음수를 모두 놓치지 않고 추출할 수 있습니다.

정리

조건이 단순하고 양의 정수만 필요하다면 리스트 컴프리헨션 방식이 간결하고 빠릅니다. 반면 실제 데이터에는 소수나 음수가 섞여 있는 경우가 많으므로, 대부분의 상황에서는 정규 표현식 기반 접근이 더 유연하고 실용적입니다.