There are some libraries for this eg stringcase, Inflection.
For many cases a would a expression like
λ ptpython >>> from stringcase import snakecase, camelcase, pascalcase >>> snakecase('DeathToCamelCase') 'death_to_camel_case' >>> camelcase('death_to_camel_case') 'deathToCamelCase' >>> pascalcase('death_to_camel_case') 'DeathToCamelCase' # Fail on this >>> snakecase('getHTTPResponseCode') 'get_h_t_t_p_response_code'This can also be good exercise to do in regex.
For many cases a would a expression like
(?!^)([A-Z]+)
work.>>> import re >>> >>> re.sub(r'(?!^)([A-Z]+)', r'_\1', 'DeathToCamelCase').lower() 'death_to_camel_case' >>> re.sub(r'(?!^)([A-Z]+)', r'_\1', 'FooBarBaz').lower() 'foo_bar_baz' >>> re.sub(r'(?!^)([A-Z]+)', r'_\1', 'getHTTPResponseCode').lower() 'get_httpresponse_code'Looking at net so have some made better like eg
((?<=[a-z0-9])[A-Z]|(?!^)[A-Z](?=[a-z]))
.