# Remove character from string in Python : voilà comment faire

Les chaînes de caractères sont **invariables** en Python. Néanmoins, il est possible de supprimer des caractères en créant, à l’aide de méthodes appropriées, une nouvelle chaîne de caractères qui ne contient que les parties souhaitées de l’original.

## L’immutabilité des chaînes : définition

L’immutabilité signifie qu’une fois qu’un objet a été créé, il ne peut plus être modifié. Dans le cas des chaînes de caractères (*strings*) en Python, **chaque chaîne de caractères est immuable (ou immutable)**. Si vous supprimez des caractères d’une chaîne avec des méthodes Python, vous créez en réalité une nouvelle chaîne de caractères qui ne possède que certains éléments de l’originale. La chaîne d’origine n’est pas affectée. L’immutabilité des chaînes contribue à une gestion efficace de la mémoire dans Python et permet d’éviter des effets inattendus lors du travail avec des chaînes de caractères.

## Supprimer des caractères spécifiques d’une chaîne de caractères

Pour supprimer certains caractères d’une chaîne, on peut par exemple utiliser `str.replace()` ou `re.sub()` avec une **expression régulière** qui représente les caractères ou motifs à supprimer.

### `str.replace()`

La fonction `str.replace()` a pour but de supprimer des parties d’un texte ou de les remplacer par une sous-chaîne.

```Python
original_string = "Bonjour, Python#"
modified_string = original_string.replace('#', '!')
print(original_string)  # Output: Bonjour, Python#
print(modified_string)  # Output: Bonjour, Python!
```

Dans l’exemple ci-dessus, la méthode replace() remplace tous les caractères de la forme « # » dans original_string par un point d’exclamation « ! ».

### `re.sub()`

La fonction `re.sub()` fait partie du module **re** de Python. Elle permet de rechercher et de remplacer des expressions régulières dans des chaînes de caractères.

```Python
import re
original_string = "Bonjour, tout le monde ! @#$%^&*"
modified_string = re.sub(r'[@#$%^&*]', '', original_string)
print(original_string)  # Output: Bonjour, tout le monde ! @#$%^&*
print(modified_string)  # Output: Bonjour, tout le monde !
```

Le motif [@#$%^&amp;*] est une expression régulière qui correspond aux caractères spéciaux @, #, $, %, ^, &amp;,*. La fonction re.sub() recherche **toutes les correspondances du motif** dans la chaîne de caractères originale original_string et les remplace par une chaîne de caractères vide ''. Nous enregistrons le résultat dans la variable modified_string et l’affichons.

## Supprimer tous les caractères sauf les lettres

Pour supprimer tous les caractères d’une chaîne, on dispose entre autres des méthodes `isalpha()`, `filter()` et `re.sub()`.

### `re.sub()`

```Python
import re
original_string = "Bonjour, 123 tout le monde ! @#$%^&*"
modified_string = re.sub(r'[^a-zA-Z]', '', original_string)
print(original_string)  # Output: Bonjour, 123 tout le monde ! @#$%^&*
print(modified_string)  # Output: Bonjourtoutlemonde
```

L’expression régulière [^a-zA-Z] correspond à tout caractère qui n’est ni une minuscule ni une majuscule. En conséquence, modified_string ne contient que les lettres de la chaîne initiale. Les espaces ont également été supprimés.

### `isalpha()`

```Python
original_string = "Bonjour, 123 tout le monde ! @#$%^&*"
modified_string = ''.join(char for char in original_string if char.isalpha())
print(original_string)  # Output: Bonjour, 123 tout le monde ! @#$%^&*
print(modified_string)  # Output: Bonjourtoutlemonde
```

Dans cet exemple, nous utilisons **List Comprehension** pour itérer à travers chaque lettre de original_string. La méthode isalpha() vérifie si un caractère est une lettre. Seules les lettres sont insérées dans une nouvelle chaîne de caractères modified_string, et tous les autres caractères sont ignorés.

### `filtre()`

```Python
original_string = "Bonjour, 123 tout le monde ! @#$%^&*"
filtered_chars = filter(str.isalpha, original_string)
modified_string = ''.join(filtered_chars)
print(original_string)  # Output: Bonjour, 123 tout le monde ! @#$%^&*
print(modified_string)  # Output: Bonjourtoutlemonde
```

str.isalpha() est une méthode qui renvoie True si le caractère est une lettre, sinon False. La fonction filter() crée un **objet filtre** qui ne contient que les caractères pour lesquels la condition str.isalpha() est vraie. Ainsi, nous pouvons retirer tous les caractères qui ne sont pas des lettres dans original_string.

## Supprimer tous les caractères sauf les chiffres

Les nombres peuvent être séparés de la même manière que dans les exemples précédents avec `re.sub()`, `filter()` et la fonction `isdecimal()` analogue à `isalpha()`.

### `re.sub()`

```Python
import re
original_string = "Bonjour, 123 tout le monde ! @#$%^&*"
modified_string = re.sub('[^0-9]', '', original_string)
print(original_string)  # Output: Bonjour, 123 tout le monde ! @#$%^&*
print(modified_string)  # Output: 123
```

Avec 0-9, nous définissons une plage qui inclut tous les chiffres de 0 à 9. Le trait d’union - entre 0 et 9 sert d’opérateur de plage. Le préfixe ^ se réfère à tous les caractères qui ne se trouvent pas dans la plage indiquée de 0 à 9. Ils sont remplacés par des caractères vides par re.sub.

### `filter()`

```Python
original_string = "Bonjour, 123 tout le monde ! @#$%^&*"
filtered_chars = filter(str.isdecimal, original_string)
modified_string = ''.join(filtered_chars)
print(original_string)  # Output: Bonjour, 123 tout le monde ! @#$%^&*
print(modified_string)  # Output: 123
```

La fonction filter() combinée à isdecimal() peut filtrer les chiffres d’une chaîne et supprimer les caractères restants. La nouvelle chaîne ne nous affiche donc que les chiffres 123.

### `isdecimal()`

```Python
original_string = "Bonjour, 123 tout le monde"
modified_string = ''.join('*' if not char.isdecimal() else char for char in original_string)
print(original_string)  # Output: Bonjour, 123 tout le monde
print(modified_string)  # Output: *******123******
```

Nous pouvons aussi utiliser la méthode isdecimal() dans une List Comprehension pour itérer à travers chaque char dans original_string. Si le caractère n’est pas un chiffre décimal (not char.isdecimal() est vrai), il est remplacé par un astérisque *, sinon il reste inchangé.

## Supprimer des caractères avec `translate()`

La méthode `translate()` est une fonction intégrée dans Python qui est utilisée pour la substitution et la traduction avancée de caractères dans les chaînes de caractères. Elle offre un moyen efficace de remplacer des caractères en se basant sur un tableau de traductions.

```Python
original_string = "Bonjour, tout le monde ! Enlève voyelles."
translation_table = str.maketrans(dict.fromkeys('aeiouAEIOU', '*'))
modified_string = original_string.translate(translation_table)
print(original_string)  # Output: Bonjour, tout le monde ! Enlève voyelles.
print(modified_string)  # Output: B*nj**r, t**t l* m*nd* ! *nl*v *v*y*ll*s.
```

Nous utilisons le constructeur str.maketrans() et dict.fromkeys() pour créer la **table de traduction**. Celle-ci indique que toutes les voyelles doivent être remplacées par *. La table est ensuite appliquée à la chaîne initiale pour obtenir modified_string.

Conseil Lors du filtrage de chaînes de caractères, il est également possible de prendre en compte le [Python String Index](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/python-string-index/) pour filtrer les caractères à des endroits précis. Si vous souhaitez éditer les chaînes de caractères dans un format particulier, vous devriez jeter un coup d’œil à notre guide sur le thème [Python String Format](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/python-string-format/).


This is a markdown version of: [https://www.ionos.fr/digitalguide/sites-internet/developpement-web/supprimer-les-caracteres-inutiles-dans-les-strings-python/](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/supprimer-les-caracteres-inutiles-dans-les-strings-python/) for AI/LLM consumption.