카멜 케이스를 스네이크 케이스로 변환하는 파이썬 함수
파이썬에서 카멜 케이스(CamelCase) 문자열을 스네이크 케이스(snake_case)로 변환하려면 정규 표현식(re 모듈)을 활용하면 간단하게 처리할 수 있습니다. 아래는 이를 구현한 예제 코드입니다.
import re
def convert(name):
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
print(convert('JavaBeans'))
print(convert('JavaStrutsSwing'))
실행 결과:
java_beans java_struts_swing
코드 동작 원리
이 함수는 두 단계의 정규식 치환을 통해 대문자 앞에 언더스코어(_)를 삽입한 뒤, 전체를 소문자로 변환합니다.
- 첫 번째 치환:
(.)([A-Z][a-z]+)패턴은 임의의 한 문자 뒤에 '대문자 + 소문자 연속'이 이어지는 부분을 찾아 두 그룹 사이에 언더스코어를 삽입합니다. - 두 번째 치환:
([a-z0-9])([A-Z])패턴은 소문자 또는 숫자 바로 뒤에 대문자가 오는 경우를 찾아 언더스코어를 삽입합니다. - .lower(): 마지막으로 전체 문자열을 소문자로 변환하여 최종적인 스네이크 케이스 형태를 완성합니다.
참고로 위 코드는 파이썬 2 스타일의 print 문으로 작성된 예제이며, 파이썬 3 환경에서는 반드시 print() 함수 형태로 호출해야 정상적으로 동작합니다.