Exemple :
>>> convert('CamelCase')
'camel_case'
Exemple :
>>> convert('CamelCase')
'camel_case'
Aus Spaß an der Freude:
>>> def un_camel(input):
... output = [input[0].lower()]
... for c in input[1:]:
... if c in ('ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
... output.append('_')
... output.append(c.lower())
... else:
... output.append(c)
... return str.join('', output)
...
>>> un_camel("camel_case")
'camel_case'
>>> un_camel("CamelCase")
'camel_case'
Oder, mehr zum Spaß:
>>> un_camel = lambda i: i[0].lower() + str.join('', ("_" + c.lower() if c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" else c for c in i[1:]))
>>> un_camel("camel_case")
'camel_case'
>>> un_camel("CamelCase")
'camel_case'
Dies ist keine elegante Methode, ist eine sehr "Low-Level"-Implementierung eines einfachen Zustandsautomaten (Bitfeld-Zustandsautomat), möglicherweise die anti-pythonischen Modus, um dies zu lösen, jedoch re Modul implementiert auch eine zu komplexe Zustandsmaschine, um diese einfache Aufgabe zu lösen, so dass ich denke, dies ist eine gute Lösung.
def splitSymbol(s):
si, ci, state = 0, 0, 0 # start_index, current_index
'''
state bits:
0: no yields
1: lower yields
2: lower yields - 1
4: upper yields
8: digit yields
16: other yields
32 : upper sequence mark
'''
for c in s:
if c.islower():
if state & 1:
yield s[si:ci]
si = ci
elif state & 2:
yield s[si:ci - 1]
si = ci - 1
state = 4 | 8 | 16
ci += 1
elif c.isupper():
if state & 4:
yield s[si:ci]
si = ci
if state & 32:
state = 2 | 8 | 16 | 32
else:
state = 8 | 16 | 32
ci += 1
elif c.isdigit():
if state & 8:
yield s[si:ci]
si = ci
state = 1 | 4 | 16
ci += 1
else:
if state & 16:
yield s[si:ci]
state = 0
ci += 1 # eat ci
si = ci
print(' : ', c, bin(state))
if state:
yield s[si:ci]
def camelcaseToUnderscore(s):
return '_'.join(splitSymbol(s))
splitsymbol kann alle Groß- und Kleinschreibungstypen parsen: UpperSEQUENCEInterleaved, under_score, BIG_SYMBOLS und cammelCasedMethods
Ich hoffe, es ist nützlich
So viele komplizierte Methoden... Finden Sie einfach alle "Titled"-Gruppen und fügen Sie deren kleingeschriebene Variante mit Unterstrich zusammen.
>>> import re
>>> def camel_to_snake(string):
... groups = re.findall('([A-z0-9][a-z]*)', string)
... return '_'.join([i.lower() for i in groups])
...
>>> camel_to_snake('ABCPingPongByTheWay2KWhereIsOurBorderlands3???')
'a_b_c_ping_pong_by_the_way_2_k_where_is_our_borderlands_3'
Wenn Sie die Zahlen nicht als erstes Zeichen der Gruppe oder als separate Gruppe verwenden möchten, können Sie ([A-z][a-z0-9]*)
Maske.
Werfen Sie einen Blick auf die ausgezeichnete Schematics lib
https://github.com/schematics/schematics
Es erlaubt Ihnen, typisierte Datenstrukturen zu erstellen, die von Python zu Javascript Flavour serialisieren/deserialisieren können, z.B:
class MapPrice(Model):
price_before_vat = DecimalType(serialized_name='priceBeforeVat')
vat_rate = DecimalType(serialized_name='vatRate')
vat = DecimalType()
total_price = DecimalType(serialized_name='totalPrice')
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.