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?
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()
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()
>>> foo = "Bs12 3ab"
>>> foo[:-3]
'Bs12 '
>>> foo[:-3].strip()
'Bs12'
>>> foo[:-3].strip().replace(" ","")
'Bs12'
>>> foo[:-3].strip().replace(" ","").upper()
'BS12'
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)
>>> foo = 'BS1 1AB'
>>> foo.replace(" ", "").rstrip()[:-3].upper()
'BS1'
J'essaie d'éviter les expressions régulières, mais cela semble fonctionner:
string = re.sub("\s","",(string.lower()))[:-3]
Quel est le problème avec cela?
foo.replace(" ", "")[:-3].upper()
split
slice
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])
N'effectuez-vous pas les opérations dans le mauvais ordre? Votre exigence semble être foo[:-3].replace(" ", "").upper()
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")