2017-05-16 4 views
0

Entrée:Python 2.7 - supprimer les caractères spéciaux d'une chaîne et notationsCamel il

to-camel-case 
to_camel_case 

sortie souhaitée:

toCamelCase 

Mon code:

def to_camel_case(text): 
    lst =['_', '-'] 
    if text is None: 
     return '' 
    else: 
     for char in text: 
      if text in lst: 
       text = text.replace(char, '').title() 
       return text 

Problèmes: 1) L'entrée peut être une chaîne vide - le code ci-dessus ne renvoie pas '' mais aucun; 2) Je ne suis pas sûr que la méthode title() puisse m'aider à obtenir la sortie désirée (seulement la première lettre de chaque mot avant le '-' ou le '_' dans les majuscules sauf pour la première.)

Je préfère ne pas

Répondre

1

Une meilleure façon de faire cela serait d'utiliser un list comprehension Le problème avec une boucle for est que lorsque vous supprimez des caractères du texte, la boucle change (puisque vous êtes censé parcourir tous les Il est également difficile de mettre la lettre suivante en majuscule après avoir remplacé un _ ou un - parce que vous n'avez aucun contexte sur ce qui est arrivé avant ou après

def to_camel_case(text): 
    # Split also removes the characters 
    # Start by converting - to _, then splitting on _ 
    l = text.replace('-','_').split('_') 

    # No text left after splitting 
    if not len(l): 
     return "" 

    # Break the list into two parts 
    first = l[0] 
    rest = l[1:] 

    return first + ''.join(word.capitalize() for word in rest) 

Et notre résultat:

print to_camel_case("hello-world") 

Donne helloWorld

Cette méthode est tout à fait flexible, et peut même traiter les cas comme "hello_world-how_are--you--", ce qui pourrait être difficile utilisant l'expression rationnelle si vous êtes nouveau pour elle.