0
votes

comment supprimer les caractères non alpha de fin

Sarah Ruthers

1 commentaires

Votre expression régulière ne ferait pas ce que vous prétendez, elle afficherait SarahRuthers6 (car 6 est un "caractère de mot"; \ w comprend des lettres, des chiffres et le caractère de soulignement).


3 Réponses :


0
votes

\ w est un "caractère de mot" qui comprend des caractères alphanumériques (lettres, chiffres) plus un trait de soulignement (_).

Dites que vous ne devez conserver que les majuscules et les minuscules vers la fin:

output = re.sub("[^A-Za-z ]+$", "", s)


0 commentaires

1
votes
output = re.sub("[^a-zA-Z]+$", "", s)

2 commentaires

++ mais mieux vaut le faire re.sub ("[^ a-zA-Z] + $", "", s


Remarque: Cette solution n'est pas compatible avec Unicode, car elle traitera les lettres non ASCII comme des non-lettres. J'ai suggéré [\ W \ d_] dans ma réponse pour cette raison.



1
votes

Ancrez votre modèle à la fin, et utilisez une classe de caractères correcte:

output = re.sub(r"[\W\d_]+$", "", s)

Cela supprimera une seule exécution de tous les caractères autres que des lettres à la fin de la chaîne; l'ancre $ limite la plage et [\ W \ d_] correspond correctement aux non-lettres, pas seulement aux caractères autres que des mots (les caractères des mots incluent les chiffres et le caractère de soulignement) .

J'ai également fait de l'expression régulière une chaîne brute (ce que vous devriez toujours faire de toute façon pour les modèles d'expression régulière), supprimant le besoin de doubler les barres obliques inverses.

Notez que si [ ^ a-zA-Z] pourrait remplacer [\ W \ d_] pour votre cas spécifique, je recommande fortement [\ W \ d_] plutôt que [^ a-zA-Z] parce que le premier est compatible Unicode, alors que le second ne l'est pas; par exemple si votre texte est 'résumé' , l'utilisation de [^ a-zA-Z] supprimera le à © de fin, [\ W \ d_] ne le fera pas.


0 commentaires