Python >> Tutoriel Python >  >> Python

Comment supprimer le préfixe d'une chaîne en Python ?

Résumé : Ce blog explique les différentes façons de supprimer le préfixe d'une chaîne en Python. Comment supprimer le préfixe d'une chaîne en Python ?

Python 3.9 fournit le removeprefix() méthode pour faciliter la manipulation des chaînes. Le removeprefix() La méthode Python String Object supprime les préfixes de toute chaîne. Il faut fournir le préfixe comme argument au removeprefix() méthode. Par exemple, my_string.removeprefix('xxx') supprime le préfixe 'xxx' à partir de my_string .

>>> 'xxxhello world'.removeprefix('xxx')
'hello world'

Remarque  :Toutes les solutions fournies ci-dessous ont été vérifiées avec Python 3.9.0b5

Formulation du problème

Imaginez que l'on ait la chaîne suivante en Python.

my_string = "PKG_CONFIG_PATH=/usr/local/opt/sqlite/lib/pkgconfig"

Comment se débarrasser du préfixe "PKG_CONFIG_PATH=" et obtenir la chaîne restante ?

new_string = "/usr/local/opt/sqlite/lib/pkgconfig"

Contexte

Dans des domaines tels que l'informatique, on trouve souvent la nécessité de supprimer le préfixe d'une chaîne. La suppression des préfixes de chaîne est également nécessaire lors du nettoyage des données après leur extraction. Heureusement, Python dispose de toute une série de capacités de traitement de chaînes robustes pour ce faire. Cet article de blog explore différentes manières, à l'aide de Python, de supprimer le préfixe d'une chaîne.

La méthode simple avec removeprefix()

Python 3.9 fournit le removeprefix() méthode pour faciliter la manipulation des chaînes. Le removeprefix() La méthode Python String Object supprime les préfixes de toute chaîne. Il faut fournir le préfixe comme argument au removeprefix() méthode. Les étapes suivantes expliquent comment procéder.

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59) 
>>>
>>> ## This is the original string whose prefix needs to be removed. 
>>> my_string = "PKG_CONFIG_PATH=/usr/local/opt/sqlite/lib/pkgconfig"
>>> 
>>> ## Provide the prefix as an argument to removeprefix. 
>>> new_string = my_string.removeprefix("PKG_CONFIG_PATH=")
>>> 
>>> new_string
'/usr/local/opt/sqlite/lib/pkgconfig'
>>> 

Remarque : Le removeprefix() La méthode n'est disponible que dans Python 3.9 et versions ultérieures. Veuillez vous référer à la documentation officielle de Python pour plus de détails. Notez également que l'on pourrait faire tout cela en une seule ligne. Considérez ce qui suit…

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59) 
>>>
>>> ## Removing the prefix as a one liner. 
>>> new_string = "PKG_CONFIG_PATH=/usr/local/opt/sqlite/lib/pkgconfig".removeprefix("PKG_CONFIG_PATH=")
>>> 
>>> new_string
'/usr/local/opt/sqlite/lib/pkgconfig'

Pour les lecteurs curieux, le removesuffix() La méthode supprime les suffixes de n'importe quelle chaîne.

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59) 
>>>
>>> ## This is the original string whose suffix (“.org”) needs to be removed. 
>>> my_string = "howToRemoveThisSuffix.org"
>>> 
>>> ## Provide the suffix as an argument to removesuffix. 
>>> new_string = my_string.removesuffix(".org")
>>> 
>>> new_string
'howToRemoveThisSuffix'
>>> 

Remarque : Le removesuffix() La méthode n'est disponible que dans Python 3.9 et versions ultérieures. Veuillez vous référer à la documentation Python officielle pour plus de détails.

Mais, et si je n'ai pas Python 3.9 ?

Ne craignez rien quand Python est là !! Python est un langage de script très flexible. Il y a quelque chose pour chacun!! Il existe de nombreuses façons de trancher la même pomme, pour ainsi dire. L'exemple suivant montre une autre méthode pour supprimer le préfixe. Cette méthode utilise le len() méthode avec String Slicing pour supprimer le préfixe.

>>> ## This is the original string whose prefix needs to be removed. 
>>> my_string = "PKG_CONFIG_PATH=/usr/local/opt/sqlite/lib/pkgconfig"
>>>
>>> ## This is the prefix that needs to be removed. 
>>> my_prefix = “PKG_CONFIG_PATH=”
>>>
>>> ## Use the len() method to remove the prefix. Note that the len() method returns the
>>> ## length of the provided string argument (i.e. my_prefix). String slicing is then used
>>> ## used to select and return the remaining string.     
>>> new_string = my_string[len(my_prefix):]
>>> 
>>> new_string
'/usr/local/opt/sqlite/lib/pkgconfig'
>>> 

len() dans la méthode ci-dessus, renvoie la longueur de la ficelle. Découpage de chaînes (c'est-à-dire string[a:b] ) renvoie le reste de la chaîne. Notez que l'omission de 'b' signifie, sélectionner à partir de la position 'a' à la fin de la chaîne. Encore une fois, voici l'exemple d'une ligne.

>>> ## Removing the prefix as a one liner. 
>>> new_string = "PKG_CONFIG_PATH=/usr/local/opt/sqlite/lib/pkgconfig"[len("PKG_CONFIG_PATH="):]
>>> new_string
'/usr/local/opt/sqlite/lib/pkgconfig'
>>> 

Un lecteur curieux pourrait demander :"Eh bien, comment supprimer le suffixe sans utiliser removesuffix() ?" La réponse est similaire à ci-dessus, sauf que vous remarquerez le changement subtil dans la notation de découpage.

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59) 
>>>
>>> ## This is the original string whose suffix (“.org”) needs to be removed. 
>>> my_string = "howToRemoveThisSuffix.org"
>>> 
>>> ## This is the suffix that needs to be removed. 
>>> my_suffix = ".org"
>>>
>>> ## Use the len() method to remove the suffix. Note that the len() method returns the
>>> ## length of the provided string argument (i.e. my_suffix). String slicing is then used
>>> ## used to select and return the remaining string.     
>>> new_string = my_string[:-len(my_suffix)]
>>> 
>>> new_string
'howToRemoveThisSuffix'
>>> 

Découpage de chaînes (string[a:b] ) est à nouveau utilisé. Cependant, contrairement à ci-dessus, ‘a’ est omis. Cela indique à Python de commencer par le début de la chaîne. ‘b’ est un nombre négatif. Cela indique à Python de compter len(my_suffix) caractères à partir de la fin de my_string . Oui, le comptage se fait à rebours à partir de la fin de la chaîne. Cela supprime le suffixe lors de la formation du new_string .

Existe-t-il d'autres moyens de supprimer un préfixe ?

Oui, il existe d'autres moyens… L'objet Python String a une méthode appelée partition() . Si l'on connaît le séparateur alors utiliser le partition() méthode pour supprimer le préfixe. Le partition() méthode séparera une chaîne au premier apparition du séparateur. Cette méthode renverra un 3-tuple qui contient ce qui suit…

  • La partie avant le séparateur
  • Le séparateur lui-même
  • La partie après le séparateur.

La méthode renvoie la chaîne d'origine si le séparateur n'est pas trouvé. Dans ce cas, la chaîne d'origine est la première élément du triplet retourné. Les autres éléments sont des chaînes vides.

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59) 
>>>
>>> ## This is the original string whose prefix needs to be removed. 
>>> my_string = "PKG_CONFIG_PATH=/usr/local/opt/sqlite/lib/pkgconfig"
>>>
>>> ## The partition() method splits the original string at the separator “=”. In this
>>> ## example, this separator is the first and only occurrence.
>>> new_string = my_string.partition("=")
>>> ## new_string is a 3-Tuple
>>> new_string
('PKG_CONFIG_PATH', '=', '/usr/local/opt/sqlite/lib/pkgconfig')
>>>
>>> ## The third element is the string with the prefix removed. 
>>> new_string[2]
'/usr/local/opt/sqlite/lib/pkgconfig'

Mais comment supprimer le suffixe ? Utilisez le rpartition() Méthode d'objet Python String pour supprimer le suffixe. Le rpartition() la méthode sépare une chaîne à la dernière occurrence du séparateur. Similaire à partition() , le rpartition() renverra un 3-tuple qui contient ce qui suit…

  • La partie avant le séparateur
  • Le séparateur lui-même
  • La partie après le séparateur.

La méthode renvoie la chaîne d'origine si le séparateur n'est pas trouvé. Dans ce cas, la chaîne d'origine est le dernier élément du triplet retourné. Les autres éléments sont des chaînes vides. Prenons l'exemple suivant…

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59) 
>>>
>>> ## This is the original string whose suffix (“.org”) needs to be removed. 
>>> my_string = "howToRemoveThisSuffix.org"
>>> 
>>> ## The rpartition() method splits the original string at the separator “.”. In this
>>> ## example, this separator is the last and only occurrence.
>>> new_string = my_string.rpartition(".")
>>>
>>> ## Again, new_string is a 3-Tuple
>>> new_string
('howToRemoveThisSuffix', '.', 'org')
>>> 
>>> ## In this example, the first element is the string with the suffix removed. 
>>> new_string[0]
'howToRemoveThisSuffix'

Qu'en est-il des méthodes lstrip() et rstrip() ?

Ah !! Bonne question!!!. Il faut faire attention à l'utilisation du lstrip() et rstrip() Méthodes d'objet de chaîne. Le lstrip() La méthode prend un jeu de caractères comme argument. Cet ensemble n'est pas un préfixe; lstrip() supprime toutes les combinaisons de son argument de jeu de caractères. lstrip() utilise son argument pour supprimer le leading caractères de la chaîne d'origine, si possible. Ceci est mieux compris avec un exemple.

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59) 
>>>
>>> ## This is the original string whose prefix needs to be removed.
>>> ## The prefix “abcd=” should be removed.
>>> my_string = "abcd=abadcoffee"
>>>
>>> ## So “abcd=” is provided as the argument set to lstrip()
>>> new_string = my_string.lstrip("abcd=")
>>>
>>> ## Bad idea!! lstrip() will keep stripping all leading characters until it encounters
>>> ## a character that is not in its set, i.e. “o”
>>> new_string
'offee'
>>> ## “abadcoffee” was expected. Instead the result was “offee”. Remember
>>> ## lstrip() strips *all* combinations of its character set argument.

Le rstrip() méthode fonctionne de la même manière. Sauf qu'il utilise son argument pour supprimer la fin caractères de la chaîne d'origine, si possible. Comme avec lstrip() cet ensemble n'est pas un suffixe ; rstrip() supprime toutes les combinaisons de son argument de jeu de caractères. Cela aussi est mieux compris avec un exemple.

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59) 
>>>
>>> ## This is the original string whose suffix needs to be removed.
>>> ## The suffix “.abcd” should be removed.
>>> my_string = "deadbeefabad.abcd"
>>>
>>> ## So “.abcd” is provided as the argument set to rstrip()
>>> new_string = my_string.rstrip(".abcd")
>>>
>>> ## Bad idea!! rstrip() will keep stripping all trailing characters until it encounters
>>> ## a character that is not in its set, i.e. “f”
>>> new_string
'deadbeef'
>>> ## “deadbeefabad” was expected. Instead the result was “deadbeef”. Remember
>>> ## rstrip() strips *all* combinations of its character set argument

Académie Finxter

Ce blog vous a été présenté par Girish , un étudiant de Finxter Academy. Vous pouvez trouver son profil Upwork ici.

Référence

Toutes les recherches pour cet article de blog ont été effectuées à l'aide de Python Documents, du moteur de recherche Google et de la base de connaissances partagée de la Finxter Academy et des communautés Stack Overflow.