2 votes

Remplacer plusieurs lettres accentuées dans une chaîne par une lettre en utilisant une compréhension de liste

J'ai une fonction qui prend une chaîne de caractères et a des paramètres pour ignorer la casse et les accents. Tout semble fonctionner lorsque j'utilise une boucle for pour le paramètre ignorer_accents. Lorsque j'essaie d'utiliser une compréhension de liste, cependant, cela ne renvoie plus la valeur attendue.

S'agit-il simplement d'une erreur de syntaxe ? Je ne parviens pas à mettre en œuvre la compréhension de liste. J'ai consulté Meilleure façon de remplacer plusieurs caractères dans une chaîne de caractères ? et quelques autres messages.

def count_letter_e_text(file_text, ignore_accents, ignore_case):

    e = "e"
    acc_low_e = ["é", "ê", "è"]

    if ignore_case is True:
        file_text = file_text.lower()

    if ignore_accents is True:

        # cela fonctionne
        #file_text = file_text.replace("é", e).replace("ê", e).replace("è", e)

        # cela fonctionne aussi
#         for ch in acc_low_e:
#             if ch in file_text:
#                 file_text = file_text.replace(ch, e)

        # ne fonctionne pas avec la compréhension de liste
        #file_text = [ch.replace(ch, e) for ch in file_text if ch in acc_low_e] # donne un comptage de 6
        file_text = [file_text.replace(ch, e) for ch in acc_low_e if ch in file_text] # donne un comptage de 0

    num_of_e = file_text.count(e) 

    return num_of_e

Programme principal :

text = "Phrase 1 test contient e, é, ê, è, E, É, Ê, È"
# en attendent un compte de 12 ; en utilisant la compréhension de liste, c'est 0
text_e_count = count_letter_e_text(text, True, True)
text_e_count

3voto

Serge Ballesta Points 12850

Une compréhension de liste produit une liste. Ici, vous pourriez construire une liste de caractères et la joindre :

file_text = ''.join([t if t not in acc_low_e else 'e' for t in file_text])

0voto

Tim Biegeleisen Points 53335

Je utiliserais ici une substitution regex :

acc_low_e = ["é", "ê", "è"]
regex = '|'.join(acc_low_e)
file_text = 'café mocha'
print(file_text)
file_text = re.sub(regex, 'e', file_text)
print(file_text)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X