93 lines
2.9 KiB
Python
93 lines
2.9 KiB
Python
""" https://rosettacode.org/wiki/Camel_case_and_snake_case """
|
|
|
|
import re
|
|
|
|
def snakeToCamelCase(nam, sep='[_]+', lcmiddle=False):
|
|
""" convert snake '_' separator case to camel case """
|
|
if nam == '':
|
|
return nam
|
|
words = re.split(sep, nam.strip())
|
|
if lcmiddle:
|
|
words = [w.lower() for w in words]
|
|
words[1:] = [w[0].upper() + w[1:] for w in words[1:] if len(w) > 0]
|
|
return ''.join(words)
|
|
|
|
|
|
def spaceToCamelCase(nam):
|
|
""" convert space case to camel case """
|
|
return snakeToCamelCase(nam, sep='\s+')
|
|
|
|
def kebabToCamelCase(nam):
|
|
""" convert kebab '-' case to camel case """
|
|
return snakeToCamelCase(nam, sep='[\-]+')
|
|
|
|
def periodToCamelCase(nam):
|
|
""" convert period '.' case to camel case """
|
|
return snakeToCamelCase(nam, sep='[\.]+')
|
|
|
|
def allsepToCamelCase(nam):
|
|
""" convert all separators in allsep to camel case """
|
|
return snakeToCamelCase(nam, sep='[ \-_\.]+')
|
|
|
|
def lowermiddle_allsepToCamelCase(nam):
|
|
""" convert all separators to camel case, and all but word starts to lowercase """
|
|
return snakeToCamelCase(nam, sep='[ \-_\.]+', lcmiddle=True)
|
|
|
|
def camel_to_snake_case(nam, sep='_', allsep='[_]+', lcmiddle=True):
|
|
""" convert camel case to snake case (separate with '_') """
|
|
nam = re.sub('([A-Z]+)', sep + r"\1", nam.strip())
|
|
sep1 = '\\' + sep if sep == '.' else sep
|
|
if lcmiddle:
|
|
nam = sep.join([w.lower() for w in nam.split(sep1) if len(w) > 0])
|
|
else:
|
|
nam = sep.join([w[0].lower() + w[1:] for w in nam.split(sep1) if len(w) > 0])
|
|
return re.sub(allsep, sep, nam)
|
|
|
|
def preserve_midcaps_camel_to_snake_case(nam):
|
|
return camel_to_snake_case(nam, lcmiddle=False)
|
|
|
|
def allsep_to_snake_case(nam):
|
|
return camel_to_snake_case(nam, allsep='[ \-\._]+')
|
|
|
|
def allsep_to_kebab_case(nam):
|
|
return camel_to_snake_case(nam, allsep='[ \-\._]+', sep='-')
|
|
|
|
def allsep_to_space_case(nam):
|
|
return camel_to_snake_case(nam, allsep='[ \-\._]+', sep=' ')
|
|
|
|
def allsep_to_period_case(nam):
|
|
return camel_to_snake_case(nam, allsep='[ \-\._]+', sep='.')
|
|
|
|
def allsep_to_slash_case(nam):
|
|
return camel_to_snake_case(nam, allsep='[ \-\._]+', sep='/')
|
|
|
|
for f in [
|
|
snakeToCamelCase,
|
|
spaceToCamelCase,
|
|
kebabToCamelCase,
|
|
periodToCamelCase,
|
|
allsepToCamelCase,
|
|
lowermiddle_allsepToCamelCase,
|
|
camel_to_snake_case,
|
|
preserve_midcaps_camel_to_snake_case,
|
|
allsep_to_snake_case,
|
|
allsep_to_kebab_case,
|
|
allsep_to_space_case,
|
|
allsep_to_period_case,
|
|
allsep_to_slash_case]:
|
|
print(f"Testing function {f}:")
|
|
for teststring in [
|
|
"snakeCase",
|
|
"snake_case",
|
|
"snake-case",
|
|
"snake case",
|
|
"snake CASE",
|
|
"snake.case",
|
|
"variable_10_case",
|
|
"variable10Case",
|
|
"ɛrgo rE tHis",
|
|
"hurry-up-joe!",
|
|
"c://my-docs/happy_Flag-Day/12.doc",
|
|
" spaces "]:
|
|
print(teststring.rjust(36), " => ", f(teststring))
|
|
print()
|