web-dev-qa-db-fra.com

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

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, je dois également supprimer tout espace blanc et convertir en Cas

un exemple serait:

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

Cela fonctionne et me donne BS12 qui est ce que je veux, cependant si les 4ème et 3ème caractères sont identiques, je perds les deux, par exemple si foo = "BS11 1AA" je viens d’obtenir 'BS'

des exemples de foo pourraient être:

BS1 1AB
bs11ab
BS111ab

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

Des conseils?

124
Sam Machin

Suppression de tous les espaces:

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

Supprimer les 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()
225
Noctis Skytower

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

foo = foo.replace(' ', '')[:-3].upper()
89
Nadia Alramli
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'
14
ghostdog74

Vous avez peut-être mal interprété légèrement la rentrée, cela ne dénude pas une chaîne, mais tous les caractères 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 par rien)

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

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

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

2
krs1

Quel est le problème avec cela?

foo.replace(" ", "")[:-3].upper()
1
abyx
  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 juste supprimer les derniers caractères pour pouvoir é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 enlever les trois derniers, néanmoins qui ils sont!

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

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

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

0
AndreaG

C'est un peu ce qui 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 à la ligne. Si c'est votre définition, vous voulez utiliser une expression rationnelle avec\s pour remplacer tous les caractères d'espaces:

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")
0
Lee Joramo