182 votes

Supprimer un préfixe d'une chaîne de caractères

J'essaie de faire ce qui suit, de façon claire et pythonique :

def remove_prefix(str, prefix):
    return str.lstrip(prefix)

print remove_prefix('template.extensions', 'template.')

Cela donne :

xtensions

Ce qui n'est pas ce que j'attendais ( extensions ). De toute évidence (je suis stupide), parce que j'ai utilisé lstrip à tort : lstrip supprimera tous les caractères qui apparaissent dans le fichier passé. chars en ne considérant pas cette chaîne comme une chaîne réelle, mais comme "un ensemble de caractères à supprimer du début de la chaîne".

Existe-t-il un moyen standard de supprimer une sous-chaîne du début d'une chaîne ?

319voto

Elazar Points 6342

Je ne sais pas ce qu'est la "méthode standard".

def remove_prefix(text, prefix):
    if text.startswith(prefix):
        return text[len(prefix):]
    return text  # or whatever

Comme l'ont noté @Boris et @Stefan, sur Python 3.9+ vous pouvez utiliser

text.removeprefix(prefix)

avec le même comportement.

64voto

martineau Points 21665

Court et doux :

def remove_prefix(text, prefix):
    return text[text.startswith(prefix) and len(prefix):]

49voto

mshsayem Points 5271

Que pensez-vous de ceci (un peu tard) :

def remove_prefix(s, prefix):
    return s[len(prefix):] if s.startswith(prefix) else s

14voto

jamylak Points 38094

Solution regex (La meilleure façon est la solution de @Elazar, ceci est juste pour le plaisir)

import re
def remove_prefix(text, prefix):
    return re.sub(r'^{0}'.format(re.escape(prefix)), '', text)

>>> print remove_prefix('template.extensions', 'template.')
extensions

14voto

Blckknght Points 20780

Je pense que vous pouvez utiliser les méthodes de la str pour ce faire. Il n'y a pas besoin d'expressions régulières :

def remove_prefix(text, prefix):
    if text.startswith(prefix): # only modify the text if it starts with the prefix
         text = text.replace(prefix, "", 1) # remove one instance of prefix
    return text

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