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


146

J'essaie de supprimer les 3 derniers caractères d'une chaîne en python, je ne sais pas ce que sont ces caractères donc je ne peux pas utiliser rstrip, j'ai également besoin de supprimer tout espace blanc et de convertir en majuscules

un exemple serait:

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

Cela fonctionne et me donne BS12 qui est ce que je veux, mais si les 4ème et 3ème derniers caractères sont les mêmes, je perds les deux, par exemple si foo = "BS11 1AA"je viens de recevoir'BS'

des exemples de foopourraient être:

BS1 1AB
bs11ab
BS111ab

La chaîne peut contenir 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?

Réponses:


278

Suppression de tous les espaces:

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

Suppression des trois derniers caractères:

foo = foo[:-3]

Conversion en majuscules:

foo = foo.upper()

Tout ce code en une seule ligne:

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

9
Je voudrais noter que ''.join(foo.split())c'est mieux que foo.replace(' ', ''), lorsqu'il est utilisé sur des chaînes Unicode, car il supprime tout caractère d' espacement , en plus du ' 'caractère (en particulier, les espaces insécables sont également supprimés). Cela dit, replace()c'est probablement beaucoup plus rapide, donc il peut être utilisé si, par exemple, les chaînes d'entrée sont connues pour être codées en ASCII, qui n'a qu'un seul caractère d'espace (j'utilise la terminologie Python 2, ici.)
Eric O Lebigot

90

Cela ne fonctionne pas comme prévu car la bande est basée sur des caractères. Vous devez le faire à la place:

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

11
Cela ne supprime pas WHITESPACE comme l'OP l'a demandé; il supprime uniquement les caractères ESPACE.
John Machin

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

2
@Lidia Oui, strip supprime uniquement les espaces du début et de la fin de la chaîne.
Eliezer Miron

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

9

Vous avez peut-être mal compris légèrement rstrip, il ne supprime 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'

Alors à la place, utilisez simplement

text = text[:-3] 

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


3
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'

3

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

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


1
string.lower () doit être string.upper (). Mon erreur.
krs1

c'est la seule solution qui traite bien les espaces
Erik Aronesty

1

Quel est le problème avec ça?

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

1
  1. split
  2. slice
  3. concentrate

C'est un bon entraînement pour les débutants et c'est facile à réaliser.

Une autre méthode avancée est une fonction comme celle-ci:

def trim(s):
    return trim(s[slice])

Et pour cette question, vous voulez simplement supprimer les derniers caractères, vous pouvez donc écrire comme ceci:

def trim(s):
    return s[ : -3] 

Je pense que vous êtes prêt à vous soucier de ce que sont ces trois personnages, alors vous avez perdu. Vous voulez juste supprimer les trois derniers, mais qui ils sont!

Si vous souhaitez supprimer certains caractères spécifiques, vous pouvez en ajouter des jugements:

def trim(s):
    if [conditions]:   ### for some cases, I recommend using isinstance().
        return trim(s[slice])

0

N'effectuez-vous pas les opérations dans le mauvais ordre? Votre exigence semble êtrefoo[:-3].replace(" ", "").upper()


pointe sur ce qui suit dans la question >>> (en supposant qu'il n'y a pas d'espace blanc)
Noctis Skytower

0

Cela dépend de votre définition des espaces. J'appellerais généralement les espaces comme des espaces, des tabulations, des sauts de ligne et des retours chariot. Si c'est votre définition, vous souhaitez utiliser une expression régulière avec \ s pour remplacer tous les caractères d'espacement:

import re

def myCleaner(foo):
    print 'dirty: ', foo
    foo = re.sub(r'\s', '', foo)
    foo = foo[:-3]
    foo = foo.upper()
    print 'clean:', foo
    print

myCleaner("BS1 1AB")
myCleaner("bs11ab")
myCleaner("BS111ab")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.