Traiter des chaines de caractères
re : expressions régulières
| Fonction | Rôle |
|---|---|
search(pattern, text) |
Chercher une correspondance. |
match(pattern, text) |
Chercher au début. |
fullmatch(pattern, text) |
Vérifier l'ensemble du texte. |
findall() / finditer() |
Obtenir les résultats / les objets de correspondance. |
sub(pattern, replacement, text) |
Remplacer. |
split(pattern, text) |
Découper. |
compile(pattern) |
Construire un motif réutilisable. |
import re
text = "Commande 125 : 3 articles"
print(re.findall(r"\d+", text)) # ['125', '3']
print(re.sub(r"\s+", " ", "Bonjour Python")) # Bonjour Python
print(bool(re.fullmatch(r"[A-Z]{2}-[0-9]{4}", "AB-2026"))) # True
Le préfixe r limite l'interprétation des antislashs par les chaînes Python. Pour une recherche ou un remplacement simple, les méthodes de str restent souvent suffisantes.
Parallèle C# et .NET
string text = "Commande 125 : 3 articles";
var values = Regex.Matches(text, @"\d+").Cast<Match>().Select(m => m.Value);
Console.WriteLine(string.Join(", ", values)); // 125, 3
Console.WriteLine(Regex.Replace("Bonjour Python", @"\s+", " "));
Console.WriteLine(Regex.IsMatch("AB-2026", @"\A[A-Z]{2}-[0-9]{4}\z")); // True
Regex.Match(), Matches(), Replace() et Split() couvrent les usages courants. Regex.IsMatch() cherche par défaut une correspondance n’importe où ; les ancres \A et \z reproduisent ici le besoin de fullmatch(). Les moteurs et syntaxes, notamment les remplacements et certains groupes, diffèrent. Une chaîne verbatim C# @"..." joue un rôle proche du préfixe Python r.
io : flux en mémoire
StringIO manipule du texte comme un fichier ; BytesIO fait de même pour des octets. Ils permettent d'utiliser des API attendant un flux sans créer de fichier physique.
from io import StringIO
with StringIO() as stream:
stream.write("Bonjour")
stream.write(" Python")
print(stream.getvalue()) # Bonjour Python
stream.seek(0)
print(stream.read()) # Bonjour Python
seek() déplace la position de lecture ou d'écriture ; getvalue() récupère le contenu complet.
Parallèle C# et .NET
var builder = new StringBuilder();
using (var writer = new StringWriter(builder))
{
writer.Write("Bonjour");
writer.Write(" Python");
}
Console.WriteLine(builder.ToString()); // Bonjour Python
using var reader = new StringReader(builder.ToString());
Console.WriteLine(reader.ReadToEnd());
StringWriter et StringReader représentent des flux texte distincts, alors que StringIO regroupe lecture et écriture avec une position. MemoryStream est le rapprochement pour BytesIO. Pour lire le contenu d’un MemoryStream après écriture, replaçons sa Position à zéro ou utilisons ToArray() selon le besoin.