# 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 `[@#$%^&*]` est une expression régulière qui correspond aux caractères spéciaux `@, #, $, %, ^, &,*`. 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 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.


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