Python에서 문자열에 포함된 숫자가 아닌 문자를 제거하고 숫자만 남기고 싶다면, 여러 가지 방법을 활용할 수 있습니다. 대표적인 세 가지 방법을 예제 코드와 함께 살펴보겠습니다.
1. for문과 if문을 활용한 필터링
가장 직관적인 방법은 반복문과 조건문을 사용하여 숫자가 아닌 문자를 걸러내는 것입니다. isdigit() 메서드를 활용하면 간단하게 구현할 수 있습니다.
>>> s = "H3ll0 P30P13" >>> ''.join(i for i in s if i.isdigit()) '303013'
문자열의 각 문자를 하나씩 확인하면서 isdigit()이 참인 경우(즉, 숫자인 경우)만 새로운 문자열로 합칩니다. 코드가 읽기 쉽고 별도의 모듈 임포트가 필요 없다는 장점이 있습니다.
2. filter() 함수와 람다(lambda) 활용하기
내장 함수 filter()와 람다 표현식을 조합하면 더욱 간결한 코드로 동일한 결과를 얻을 수 있습니다.
>>> s = "H3ll0 P30P13" >>> ''.join(filter(lambda x: x.isdigit(), s)) '303013'
filter()는 첫 번째 인자로 전달된 조건 함수가 참을 반환하는 요소들만 남겨줍니다. 함수형 프로그래밍 스타일을 선호하는 개발자에게 적합한 방식입니다.
3. 정규표현식(regex) 사용하기
간단한 작업에는 다소 과할 수 있지만, 정규표현식을 사용하면 강력하고 유연하게 처리할 수 있습니다. \D는 '숫자가 아닌 문자(non-digit)'를 의미하며, 이를 빈 문자열로 치환하면 숫자만 남게 됩니다.
>>> import re
>>> s = "H3ll0 P30P13"
>>> re.sub("\D", "", s)
'303013'어떤 방법을 선택해야 할까?
세 가지 방법 모두 동일한 결과를 반환하지만, 상황에 따라 적합한 선택이 달라집니다.
- for문 + if문: 초보자도 이해하기 쉽고, 추가 로직을 넣기에 유연합니다.
- filter() + lambda: 간결하며 함수형 스타일의 코드를 선호할 때 유용합니다.
- 정규표현식(re.sub): 복잡한 패턴 매칭이 필요하거나 대량의 데이터를 처리할 때 가장 강력합니다.
간단한 숫자 추출 작업이라면 첫 번째나 두 번째 방법으로 충분하며, 더 복잡한 문자열 처리가 필요하다면 정규표현식을 고려해 보세요.