Pour les chaînes simples, on peut utiliser les guillemets simples :
s = "Le mot magique est 'abracadabra'"
ou doubles :
s = 'Le mot magique est "abracadabra"'
On peut concatener les chaines constantes avec des espaces :
s = "avec des 'guillemets simples', mais aussi" 'des "guillemets doubles"...'
Pour les chaines qui contiennent des sauts de lignes, on triple les guillemets :
s = """Ceci est une longue chaîne de caractères. En plus, elle contient des guillemets de toutes les formes : " ' « »..."""
On peut aussi remplacer """
par '''
.
Le symbole \
est spécial : il permet de transformer le caractère suivant :
\n
est un saut de ligne
\t
est une tabulation
\b
est un « backspace »
\a
est un « bip »
\'
est un « ' », mais il ne ferme pas la chaine de caractères
\"
est un « " », mais il ne ferme pas la chaine de caractères
\\
est un « \ »
Si on veut que le symbole \
reste simplement un \
dans une chaîne, on peut utiliser une chaîne « brute » ("raw string") en préfixant le premier guillemets avec un r
:
s = r"Ceci est une chaîne de caractères\nsur une seule ligne"
>>> s = "Ceci est une chaîne de caractères\nsur deux lignes." >>> print(s) >>> s = r"Ceci est une chaîne de caractères\nsur une ligne." >>> print(s) >>> s = "Et ça fait BIP\a BIP\a..." >>> print(s) >>> s = "Zut\b\b\bTabernacle !" >>> print(s) >>> s = "| a\t| bb\t| ccc\t| dddd\t| eeeee\t| ffffff\t|" >>> print(s)
Les objets « chaînes » peuvent accéder à de nombreuses méthodes. Voici quelques exemples, à compléter pendant le cours et à terminer chez vous...
>>> s = "salut, Je m'appelle Bob..." >>> print(s.lower()) >>> print(s.upper()) >>> print(s.title()) >>> print(s.capitalize()) >>> print(s.swapcase()) >>> s = "abracadabra" >>> print(s.count("bra"), "et", s.count("a")) >>> print("abc".isalpha()) >>> print("𐤄س狼".isalpha()) >>> print( ",".isalpha() , "∫".isalpha() ) >>> # voir aussi s.isdigit(), s.isalnum(), s.isnumeric()... ... >>> t = [ "Ceci" , "est" , "un" , "tableau" , "de mots" , "..." ] >>> print( " ".join(t) ) >>> print( ",".join(t) ) >>> s = "Où est le centre du monde ?" >>> print(s.center(50)) >>> s = "Où est le centre de l'univers ?" >>> print(s.center(50,"⋆")) # avec le second argument explicite >>> s = "Et la priorité à droite ?" >>> print(s.rjust(50)) # il y a aussi un second argument, à " " par défaut >>> s = " \n\t Ceci est une chaîne avec des blancs\n\tun peu partout... \n\n\n" >>> print(s.strip()) >>> print(s.strip("\n\t Ct,.;?!")) # il y a des variante s.lstrip() et s.rstrip() >>> print("Abracadabra".replace("bra" , "bro")) >>> s = """Ici, il y a : des espaces, des virgules, des lettres et le reste.""" >>> print(s.split(",")) >>> print(s.split()) # par défaut, utilise tous les caractères blancs ("\n", "\t", " ")
Pour demander une liste de nombres à l'utilisateur :
>>> def demande_nombres(): s = input("Rentrez 5 nombres entiers, séparés par des espaces :\n") t = s.split() for i in range(len(t)): t[i] = int(t[i]) return(t)
On peut créer des chaînes « à trous ». La méthode s.format(...)
permet de combler ces trous en donnant la liste des valeurs à mettre dans les trous :
>>> s = "Voici {0}chaîne à {1} trous." >>> print(s) >>> print(s.format("une " , 2)) >>> print("a{0}cada{0}".format("bra"))
On peut ainsi insérer des chaînes, des entiers, des flottants ou la plupart des objets de Python...
Pour les nombres entiers, on peut préciser s'il faut ajouter des espaces ou des 0 devant le nombre :
>>> print("Un nombre '{0}', et encore '{1:5}' et encore '{2:05}'.".format(42, 43, 44))
On peut préciser qu'il faut mettre le signe +
pour les nombres positifs :
>>> print("Le résultat est '{0:+}'.".format())
On peut indiquer la base (binaire, octal, hexadécimal) pour les nombres entiers, ou la précision pour les nombres flottants, ou si on veut aligner une valeur à gauche / droite / centre d'un trou, etc. Reportez-vous à la documentation de langage pour les détails...
On peut également utiliser des noms explicites pour les champs :
>>> s = "Le numéro d'étudiant de {prenom} {nom} est {no_etu}" >>> print(s.format(nom = "Tartempion" , prenom = "Lucien" , no_etu = "01020304"))
Les expressions régulières sont un outils pour reconnaitre des chaînes de caractères variables. Par exemple, comment peut-on reconnaitre si une chaine de caractères est une adresse email valide ?
On utilise une notation spéciale (qui peut varier selon les langages) pour repérer des morceaux d'une chaîne de caractères :
x
" : un x
, on peut remplacer "x
" par n'importe quelle lettre / chiffre,
.
" : n'importe quel caractère (sauf le saut de ligne)
[...]
" : pour un ensemble de caractères, "[abcde]
" pour une des 5 premières lettres de l'alphabet
[^...]
" : pour tous les caractères sauf quelques uns, "[^,;]
" pour n'importe quoi sauf une virgule / point-virgule
^
" : le début de la chaîne de caractères
$
" : la fin de la chaîne de caractères
*
" : pour repérer une répétition (zéro ou plus), par exemple "a*
" pour repérer une suite de a
consécutifs
+
" : comme le *
, mais avec au moins une répétition
?
" : pour zéro ou une seule fois, par exemple "ab+a
" repère à la fois "aa
" et "aba
"
\
" : pour échapper le caractère suivante, par exemple "\*
" repère une astérisque
\w
" : pour un caractère « lettre » (dans n'importe quel langage)
\w
" : pour un caractère « non lettre » (dans n'importe quel langage)
\s
" : un caractère blanc
\S
" : un caractère non blanc
Ces notations pour les expressions sont assez standard et existent dans de nombreux autres langages de programmation. Il y a de nombreuses autres expression, pour par exemple mettre une borne sup ou inf sur un nombre de répétition, ou repérer un caractère avant ou après une expression. Reportez vous à la documentation de la bibliothèque "re
".
Pour utiliser les expressions régulières, il faut charger la bibliothèque "re
" et utiliser la fonction "search(...)
". Par exemple, pour repérer un nombre flottant, on peut utiliser l'expression régulière "^[0123456789]*\.[0123456789]*$
".
>>> import re >>> def is_float(s): ... m = re.search("^[0123456789]*\.[0-9]*$" , s) ... if m != None: ... return True ... else: ... return False >>> is_float("12.34") >>> is_float(".23") >>> is_float("12.") >>> is_float("12") >>> is_float(".")
Le résultat de la fonction "re.search(...)
" est un objet spécial avec en particulier la méthode "group()
" qui permet de récupérer le morceau de chaîne de caractères repérée par un groupe (entre parenthèses) :
>>> m = re.search('<img src="([^"]+)".*>' , '<img src="./Images/logo.gif" width="200"/>') >>> nom_fichier = m.group(1) >>> print(nom_fichier)
Le résultat est un tuple avec :
0
" est la chaîne entière,
1
" est la sous-chaîne correspondant au premier bloc,
2
" est la sous-chaîne correspondant au deuxième bloc,
Par exemple
import re def nom_prenom(s): """Si "s" est une adresse email (chaîne de caractère) de l'université de Savoie, la fonction renvoie un tuple composé du prénom et du nom de la personne. Renvoie "None" sinon.""" s = s.strip() m = re.search("^([\\w_-]+)\.([\\w_-]+)@univ-savoie\.fr$" , s) if m != None: prenom, nom = m.group(1,2) return (prenom.capitalize(), nom.capitalize()) else: return None
D'autres fonctions disponibles dans la bibliothèque "re
" :
re.split()
" pour séparer une chaîne de caractères en utilisant un séparateur donné par une expression régulière,
re.findall()
" pour trouver toutes les sous-chaînes repérées par une expression régulière,
re.sub()
" pour remplacer des sous-chaînes repérées par une expression régulières,
Remarque : il y a de nombreuses autres fonctionnalités autour des expressions régulières. Reportez vous à la page correspondante dans la documentation des bibliothèques Python.