Traitement simple des chaînes de caractère en python

Si ch est une chaîne de caractères.

  1. find retourne la position de la chaîne passée en paramètre.
  2. lstrip et rstrip supprime toutes les occurrences du caractères passé en paramètre respectivement à gauche et à droite.
>>> ch="   bonjour a tous  "
>>> ch.find("tous")
13
>>> ch.lstrip(' ')
'bonjour a tous  '
>>> ch.rstrip(' ')
'   bonjour a tous'
>>> ch1=ch.lstrip(' ').rstrip(' ')
>>> print(ch1)
bonjour a tous
>>> ch1.find("tous")
10

Une chaîne de caractères peut être traitée comme un tableau de caractères. On peut donc facilement extraire un caractère, ou une sous chaîne :

>>> ch1[10]
't'
>>> ch1[3:7]
'jour'
>>> ch1[10:]
'tous'
>>> ch1[:10]
'bonjour a '
>>> ch1[:10-1]
'bonjour a'

Il s’agit d’une présentation très simplifiée des expressions régulières et de leur utilisation en python. Une présentation détaillée se trouve ici : http://docs.python.org/2/library/re.html

Une expression régulière permet décrire un modèle de chaîne de caractère.

Pour commencer, on peut utiliser :

  1. des chaînes de caractères : abc est vrai pour la chaîne abc
  2. * pour indiquer la répétition 0 ou n fois : a*bc est vrai pour bc, abc, aabc, …
  3. + pour indiquer la répétition 1 ou n fois : a+bc est vrai pour abc, aabc, …
  4. ? pour indiquer un élément optionnel : ab?c est vrai pour ac et abc
  5. . pour indiquer n’importe quel caractère : .bc
  6. [ ] pour indiquer un caractère par un ensemble : [abc] est vrai pour a ou b ou c
  7. a-z, A-Z, 0-9 indique un caractère dans l’intervalle : [0-9][a-z] est vrai pour un chiffre suivit d’une lettre minuscule.
  8. les parenthèses peuvent regrouper des éléments.

Pour vérifier si une chaîne de caractères correspond à une expression régulière, il faut importer le module re (import re) et comparer avec None.

>>> re.match("a*bc","abc") != None
True
>>> re.match("a*bc","bc") != None
True
>>> re.match("a*bc","abd") != None
False

Pour chercher un sous chaîne correspondant à une chaîne : re.search retourne un objet sur lequel on peut appeler start() ou end() pour avoir la position de début et de fin du motif.

>>> ch="0345345abdz43534543"
>>> m=re.search("[a-z]+",ch)
>>> print(m.start)
>>> print(m.start())
7
>>> print(m.end())
11

Pour remplacer un motif par une valeur on utilise la fonction sub ;

>>> re.sub("[a-z]+",'X',ch)
'0345345X43534543'

Il est aussi possible de découper en fonction d’un séparateur décrit comme une expression régulière :

>>> re.split("[a-z]+",ch)
['0345345', '43534543']

—- dataentry page —- type : Howto technologie_tags : Python theme_tags : Chaînes de caractères, Expressions régulières