파이썬에서 문자열에 숫자 문자만 포함되어 있는지 확인해야 하는 경우가 자주 있습니다. 예를 들어 사용자 입력을 검증하거나 데이터를 전처리할 때 유용합니다. 상황에 따라 isdigit() 메서드, float() 변환, 그리고 정규표현식(regex) 세 가지 방법을 활용할 수 있습니다.
1. isdigit() 메서드 사용하기
문자열 클래스(String)에는 isdigit()이라는 메서드가 내장되어 있습니다. 이 메서드는 문자열의 모든 문자가 숫자이고 최소 한 개 이상의 문자가 존재할 때 True를 반환하며, 그렇지 않으면 False를 반환합니다. 다음과 같이 호출할 수 있습니다.
>>> "12345".isdigit()
True
>>> "12345a".isdigit()
False
위 예시에서 알 수 있듯이, 문자열 중간에 알파벳 같은 다른 문자가 섞여 있으면 False가 반환됩니다.
2. float() 변환으로 소수점 숫자 검사하기
다만 isdigit()은 소수점이 포함된 부동소수점 숫자(floating-point number)에는 적합하지 않습니다. 예를 들어 "12.345"는 숫자임에도 불구하고 마침표(.) 때문에 False를 반환합니다. 이런 경우에는 try-except문> 블록과 함께 float() 변환을 활용하는 것이 좋습니다.
def isfloat(value):
try:
float(value)
return True
except ValueError:
return False
isfloat('12.345')
isfloat('12a')
실행 결과는 다음과 같습니다.
True
False
'12.345'는 정상적으로 실수로 변환되므로 True가, '12a'는 변환 과정에서 ValueError가 발생하므로 False가 출력됩니다.
3. 정규표현식(regex)으로 검사하기
같은 결과를 정규표현식으로도 얻을 수 있습니다. 소수(decimal) 형태의 문자열을 매칭하려면 re.match(regex, string) 함수에 "^\d+?\.\d+?$" 패턴을 사용하면 됩니다. 이 패턴은 '정수부.소수부' 형태의 문자열만 통과시킵니다.
>>> bool(re.match("^\d+?\.\d+?$", '123abc'))
False
>>> bool(re.match("^\d+?\.\d+?$", '12.345'))
True
정리
- isdigit(): 정수 형태의 숫자 문자열만 판별할 때 간편하게 사용
- float() 변환: 소수점이 포함된 숫자까지 포괄적으로 검사할 때 유용
- 정규표현식: 원하는 숫자 형식을 더 엄격하고 유연하게 정의할 때 적합
상황에 맞는 방법을 선택하면 문자열 숫자 검증 로직을 깔끔하게 구현할 수 있습니다.