문자열이 숫자로 시작하는 경우가 종종 있습니다. 예를 들어 "347Hello"처럼 앞부분에 숫자가 붙어 있는 문자열에서 순수한 숫자 부분인 347만 깔끔하게 분리해야 할 때가 있죠. 이번 글에서는 문자열 맨 앞에 고정된 숫자 접두사를 추출하는 세 가지 방법을 소개합니다.
1. isdigit과 takewhile 조합
isdigit() 함수는 문자열의 각 문자가 숫자인지 여부를 판별합니다. 여기에 itertools 모듈의 takewhile 함수를 함께 사용하면, 문자열을 처음부터 순회하면서 숫자인 동안의 문자들만 모아 하나의 문자열로 결합할 수 있습니다.
예제 코드
from itertools import takewhile
# 주어진 문자열
stringA = "347Hello"
print("주어진 문자열 : ", stringA)
# takewhile 사용
res = ''.join(takewhile(str.isdigit, stringA))
# 결과 출력
print("문자열에서 추출한 숫자 접두사:\n", res)실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
주어진 문자열 : 347Hello 문자열에서 추출한 숫자 접두사: 347
2. re.sub 사용
정규표현식 모듈인 re를 활용하면 숫자가 아닌 문자를 찾아 제거하는 방식으로 문제를 해결할 수 있습니다. 패턴 '\D.*'는 첫 번째 비숫자 문자와 그 뒤의 모든 문자를 의미하므로, 이를 빈 문자열로 치환하면 문자열 시작 부분의 숫자만 남게 됩니다.
예제 코드
import re
# 주어진 문자열
stringA = "347Hello"
print("주어진 문자열 : ", stringA)
# re.sub 사용
res = re.sub('\D.*', '', stringA)
# 결과 출력
print("문자열에서 추출한 숫자 접두사:\n", res)실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
주어진 문자열 : 347Hello 문자열에서 추출한 숫자 접두사: 347
3. re.findall 사용
findall 함수도 같은 원리로 동작합니다. 패턴 '\d+'는 연속된 숫자를 의미하며, 이를 통해 문자열에서 숫자 덩어리들을 찾아낸 후 join으로 합칩니다. 참고로 *(0개 이상) 대신 +(1개 이상)를 사용한다는 점이 특징입니다.
예제 코드
import re
# 주어진 문자열
stringA = "347Hello"
print("주어진 문자열 : ", stringA)
# re.findall 사용
res = ''.join(re.findall('\d+', stringA))
# 결과 출력
print("문자열에서 추출한 숫자 접두사:\n", res)실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
주어진 문자열 : 347Hello 문자열에서 추출한 숫자 접두사: 347
마무리
세 가지 방법 모두 동일한 결과를 반환하지만 상황에 따라 적합성이 다릅니다. 외부 모듈 없이 간단히 처리하고 싶다면 takewhile 방식이, 정규표현식에 익숙하고 더 복잡한 패턴 매칭까지 고려한다면 re 모듈 기반의 방법이 유용합니다. 특히 re.findall은 문자열 중간에 있는 숫자도 함께 가져올 수 있으므로, 오직 '접두사'만 필요하다면 re.sub나 takewhile 방식이 더 안전한 선택입니다.