이 글에서는 사용자로부터 낙타 표기법(Camel Case) 문자열을 입력받아, 형식이 올바른지 검증한 뒤 단어별로 분할하여 판다스(Pandas) 시리즈에 저장하는 파이썬 프로그램을 만드는 방법을 알아봅니다.
실행 결과 미리 보기
낙타 표기법 문자열을 분할하면 다음과 같이 각 단어가 시리즈의 개별 요소로 저장됩니다.
문자열을 입력하세요:
pandasSeriesDataFrame
Series is:
0 pandas
1 Series
2 Data
3 Frame
dtype: object
해결 방법
이 문제는 아래 단계를 순서대로 따라 하면 해결할 수 있습니다.
입력 문자열을 인수로 받는 함수를 정의합니다.
result 변수에 조건을 설정합니다. 조건은 "입력 문자열이 전부 소문자도 아니고, 전부 대문자도 아니며, 밑줄(_)을 포함하지 않는 경우"입니다.
result = (s != s.lower() and s != s.upper() and "_" not in s)
if 조건문으로 result가 참일 때 정규표현식 모듈의 re.findall 메서드를 사용해 낙타 표기법 패턴을 찾고, 그 결과를 판다스 시리즈로 변환합니다.
pd.Series(re.findall(r'[A-Za-z](?:[a-z]+|[A-Z]*(?=[A-Z]|$))', s))
조건이 거짓이라면 입력값이 낙타 표기법 형식이 아니라는 메시지를 출력합니다.
정규표현식 패턴 살펴보기
핵심이 되는 패턴 r'[A-Za-z](?:[a-z]+|[A-Z]*(?=[A-Z]|$))'은 다음과 같이 동작합니다.
[A-Za-z]: 단어의 첫 글자(대소문자 모두 가능)를 매칭합니다.[a-z]+: 첫 글자 뒤에 이어지는 소문자들을 하나의 단어로 묶어 매칭합니다.[A-Z]*(?=[A-Z]|$): 연속된 대문자(예: DataFrame의 F)를 처리하되, 마지막 대문자는 다음 대문자나 문자열 끝 바로 앞까지만 포함합니다.
예제 코드
전체 구현 코드는 다음과 같습니다.
import pandas as pd
import re
def camelCase(s):
result = (s != s.lower() and s != s.upper() and "_" not in s)
if(result == True):
series = pd.Series(re.findall(r'[A-Za-z](?:[a-z]+|[A-Z]*(?=[A-Z]|$))', s))
print(series)
else:
print("입력값이 낙타 표기법 형식이 아닙니다")
s = input("문자열을 입력하세요: ")
camelCase(s)
출력 결과
문자열을 입력하세요:
pandasSeriesDataFrame
0 pandas
1 Series
2 Data
3 Frame
dtype: object
문자열을 입력하세요: pandasseries
입력값이 낙타 표기법 형식이 아닙니다
이처럼 간단한 조건 검증과 정규표현식만으로도 낙타 표기법 문자열을 손쉽게 판별하고, 단어 단위로 분할한 결과를 판다스 시리즈로 깔끔하게 정리할 수 있습니다.