Chaînes de caractères#
essentiel
Immutabilité#
Une chaîne ne peut pas être modifiée en place : toute méthode qui "modifie" renvoie une nouvelle chaîne.
Indexation et slicing#
Méthodes courantes#
s.upper(); s.lower(); s.title(); s.capitalize()
s.strip(); s.lstrip(); s.rstrip() # espaces (ou caractères donnés)
s.replace("o", "0")
s.split(",") # -> liste
",".join(["a", "b", "c"]) # -> "a,b,c"
s.find("th") # index ou -1
s.index("th") # index ou ValueError
s.startswith("py"); s.endswith("on")
s.count("o")
s.isdigit(); s.isalpha(); s.isalnum(); s.isspace()
len(s)
Détail complet : Fonctions — Texte.
Concaténation et répétition#
"a" + "b" # "ab"
"ab" * 3 # "ababab"
" ".join(["a", "b", "c"]) # préférer join() à + dans une boucle
Formatage#
f"{nom} a {age} ans" # f-string (à privilégier)
"{} a {} ans".format(nom, age) # .format()
"%s a %d ans" % (nom, age) # %-formatting (ancien style)
Mini-langage de format (identique en f-string et .format()) :
f"{3.14159:.2f}" # '3.14' — 2 décimales
f"{42:05d}" # '00042' — remplissage par des zéros
f"{1234567:_}" # '1_234_567' — séparateur de milliers
f"{0.256:.1%}" # '25.6%' — pourcentage
f"{2.5e-8:.2e}" # '2.50e-08' — notation scientifique
f"{'ok':>10}" # ' ok' — aligné à droite sur 10 caractères
f"{nom!r}" # applique repr() au lieu de str()
Recherche par motif (re)#
Les expressions régulières forment un sous-langage à part entière ; ne les sortir que lorsque split, startswith ou in ne suffisent plus.
import re
m = re.search(r"(\d+)-(\d+)", "plage 10-25") # 1re occurrence, ou None
if m:
m.group(0) # '10-25' (motif entier)
m.group(1) # '10' (1er groupe capturant)
m.groups() # ('10', '25')
re.findall(r"\d+", s) # toutes les occurrences, sous forme de liste
re.sub(r"\s+", " ", s) # remplace toute suite d'espaces par un seul
re.split(r"[;,]\s*", s) # découpe sur ';' ou ',' suivis d'espaces
re.fullmatch(r"\d{5}", s) # le motif doit couvrir TOUTE la chaîne
| Motif | Signification |
|---|---|
\d \w \s |
chiffre / caractère de mot / espace (majuscule = négation : \D) |
. |
n'importe quel caractère sauf saut de ligne |
* + ? |
0-n / 1-n / 0-1 répétitions |
{n,m} |
entre n et m répétitions |
^ $ |
début / fin de chaîne |
[abc] |
un caractère parmi a, b, c |
(...) |
groupe capturant |
Piège
Toujours écrire les motifs en raw string r"\d+" : sans le r, "\d" est interprété par Python avant re.
re.match() n'ancre qu'au début de la chaîne : utiliser re.search() pour chercher partout, re.fullmatch() pour valider un format complet.