Given a string in camel case, write a Python program to convert the given string from camel case to snake case.
Examples:
Input : GeeksForGeeks
Output : geeks_for_geeks
Input : ThisIsInCamelCase
Output : this_is_in_camel_case
Let’s see the different ways we can do this task.
Method #1 : Naive Approach
This is a naive implementation to convert camel case to snake case. First, we initialize a variable ‘res’ with an empty list and append first character (in lower case) to it. Now, Each time we encounter a Capital alphabet, we append ‘_’ and the alphabet (in lower case) to ‘res’, otherwise, just append the alphabet only.
Python3
def change_case( str ):
res = [ str [ 0 ].lower()]
for c in str [ 1 :]:
if c in ( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ):
res.append( '_' )
res.append(c.lower())
else :
res.append(c)
return ''.join(res)
str = "GeeksForGeeks"
print (change_case( str ))
|
Time complexity: O(n)
Auxiliary Space: O(n), where n is length of given string.
Method #2 : List comprehension
Python3
def change_case( str ):
return ' '.join([' _' + i.lower() if i.isupper()
else i for i in str ]).lstrip( '_' )
str = "GeeksForGeeks"
print (change_case( str ))
|
Method #3 : Python reduce()
Python reduce() method applies a function to all the string alphabets, that wherever it find uppercase alphabet, it add ‘_’ in front of it and replace the uppercase alphabet with lowercase alphabet.
Python3
from functools import reduce
def change_case( str ):
return reduce ( lambda x, y: x + ( '_' if y.isupper() else '') + y, str ).lower()
str = "GeeksForGeeks"
print (change_case( str ))
|
Method #4 : Python Regex
Python3
import re
def change_case( str ):
s1 = re.sub( '(.)([A-Z][a-z]+)' , r '\1_\2' , str )
return re.sub( '([a-z0-9])([A-Z])' , r '\1_\2' , s1).lower()
str = "GeeksForGeeks"
print (change_case( str ))
|
Method #5 : Using isupper(),lower() and slicing
Python3
def change_case( str ):
res = ""
for i in str :
if (i.isupper()):
res + = "_" + i.lower()
else :
res + = i
return res[ 1 :]
str = "GeeksForGeeks"
print (change_case( str ))
|
Method #6 : Using recursion
The provided code consists of two functions: camel_to_snake and cameltosnake. The camel_to_snake function is a wrapper function that converts the first character of the input string to lowercase and then calls the cameltosnake function on the modified string.
The cameltosnake function converts the input string from camel case to snake case by recursively processing the string character by character. If the current character is uppercase, it adds an underscore before it and makes it lowercase. If the current character is lowercase, it simply returns it. The base case for the recursion is when the input string is empty, in which case the function simply returns an empty string. The result of the recursion is then returned by the camel_to_snake function.
Python3
def cameltosnake(camel_string: str ) - > str :
if not camel_string:
return ""
elif camel_string[ 0 ].isupper():
return f "_{camel_string[0].lower()}{cameltosnake(camel_string[1:])}"
else :
return f "{camel_string[0]}{cameltosnake(camel_string[1:])}"
def camel_to_snake(s):
if len (s)< = 1 :
return s.lower()
return cameltosnake(s[ 0 ].lower() + s[ 1 :])
print (camel_to_snake( "GeeksForGeeks" ))
print (camel_to_snake( "ThisIsInCamelCase" ))
|
Output
geeks_for_geeks
this_is_in_camel_case
The time complexity of this approach is O(n), where n is the length of the input string. The auxiliary space is also O(n), since the recursive call stack will have a maximum depth of n.
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape,
GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out -
check it out now!