209 votes

Python Supprimer les 3 derniers caractères d'une chaîne de caractères

J'essaie de supprimer les 3 derniers caractères d'une chaîne de caractères en python, je ne sais pas ce que sont ces caractères et je ne peux donc pas utiliser rstrip J'ai aussi besoin d'enlever les espaces blancs et de convertir en majuscules.

un exemple serait :

foo = "Bs12 3ab"
foo.replace(" ", "").rstrip(foo[-3:]).upper()

Cela fonctionne et me donne BS12, ce qui est ce que je veux, mais si les 4 et 3 derniers caractères sont identiques, je perds les deux, par exemple si foo = "BS11 1AA" J'ai juste 'BS'

exemples de foo pourrait être :

BS1 1AB
bs11ab
BS111ab

La chaîne peut comporter 6 ou 7 caractères et je dois supprimer les 3 derniers (en supposant qu'il n'y a pas d'espace blanc).

Des conseils ?

392voto

Noctis Skytower Points 5137

Suppression de tous les espaces blancs :

foo = ''.join(foo.split())

Suppression des trois derniers caractères :

foo = foo[:-3]

Conversion en lettres majuscules :

foo = foo.upper()

Tout ce code en une seule ligne :

foo = ''.join(foo.split())[:-3].upper()

11 votes

Je tiens à souligner que ''.join(foo.split()) est meilleur que foo.replace(' ', '') lorsqu'il est utilisé sur des chaînes de caractères unicode, car il supprime tout espace blanc en plus du caractère ' ' (en particulier, les espaces insécables sont également supprimés). Cela dit replace() est probablement beaucoup plus rapide, et peut donc être utilisé si, par exemple, les chaînes d'entrée sont connues pour être codées en ASCII, qui ne comporte qu'un seul caractère d'espacement (j'utilise ici la terminologie de Python 2).

94voto

Nadia Alramli Points 40381

Cela ne fonctionne pas comme vous l'attendez parce que la bande est basée sur le caractère. Vous devez faire ceci à la place :

foo = foo.replace(' ', '')[:-3].upper()

11 votes

Cela ne supprime pas les ESPACES comme le demande le PO ; cela supprime uniquement les ESPACES.

22voto

ghostdog74 Points 86060
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'

2 votes

@Lidia Oui, le stripage ne supprime que les espaces au début et à la fin de la chaîne.

0 votes

Il faut noter que vous ne pouvez pas enchaîner ceci par exemple foo[3 :]foo[:-3]

9voto

Mattias Nilsson Points 2269

Vous avez peut-être mal compris rstrip, il ne dépouille pas une chaîne mais n'importe quel caractère de la chaîne que vous spécifiez.

Comme ça :

>>> text = "xxxxcbaabc"
>>> text.rstrip("abc")
'xxxx'

Donc, à la place, utilisez simplement

text = text[:-3] 

(après avoir remplacé les espaces blancs par rien)

4voto

krs1 Points 834

J'essaie d'éviter les expressions régulières, mais cela semble fonctionner :

string = re.sub("\s","",(string.lower()))[:-3]

1 votes

String.lower() devrait être string.upper(). C'est mon erreur.

0 votes

C'est la seule solution qui traite bien les espaces blancs

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