class: center, middle # Expressions régulières --- # Définition
Les expressions régulières constituent un système très puissant et très rapide pour faire des
recherches dans des chaînes de caractères
(fonctionnalité rechercher/remplacer très poussée).
Le
module re
permet de manipuler les expressions regulières en Python.
```python >>> import re ```
**Exemples d'utilisation :**
On va rechercher le motif
ATG
dans la chaine de caractères
ATGCAGTCGACTAGCTAG
.
On va chercher un motif de 3 lettres commençant par A et se terminant par G dans la chaine de caractères
ATGCAGTCGACTAGCTAG
.
--- # Motifs *
[a-z]
et
[A-Z]
: tout caractère alphabétique en minuscule et en majuscule *
[a-zA-Z0-9]
: tout caractère alphanumérique *
[aeiouy]
: un caractère de type voyelle (1 seul caractère) *
.
: n'importe quel caractère
*
\n
: retour chariot *
\t
: tabulation *
\s
: un espace, une tabulation, un saut de ligne ([ \t\n])
*
^
: début de ligne *
$
: fin de ligne
*
\d
: [0-9] *
\w
: [0-9A-Za-z_]
**Exemples :**
* un motif qui commence par **P9e** ou par **M8a** * un motif qui se termine par **u7B 0** ou par **p9A 7** --- # Opérateurs *
\*
: 0 à n fois le caractère précédent ou l'expression entre parenthèses précédente *
\+
: 1 à n fois le caractère précédent ou l'expression entre parenthèses précédente *
?
: 0 à 1 fois le caractère précédent ou l'expression entre parenthèses précédente
*
{n}
: n fois le caractère précédent ou l'expression entre parenthèses précédente *
{n,m}
: n à m fois le caractère précédent ou l'expression entre parenthèses précédente
*
(AT|CG)
: les chaînes de caractères **AT** ou **CG**
**Exemples :**
* un motif qui couvre **AT3G15245** et **OS4G02786** * un motif qui couvre **ATG** puis **TTG** séparés de 7 caractères --- # Caractères spéciaux et points d'attention *
^ | ( ) [ ] { } \ / $ + * ? . -
: caractères spéciaux *
\
: caractère d'échappement
*
[^0-9]
: tout sauf un caractère numérique *
^[0-9]
: commence par un caractère numérique
*
()
: référencer une partie du motif afin de le récupérer --- # Quelques outils en ligne *
https://regexone.com/
*
https://regexr.com/
*
https://extendsclass.com/regex-tester.html#python
*
https://pythex.org/
--- # Fonction search()
La fonction
search()
du module re permet de
chercher un motif
au sein d'une chaîne de caractères.
```python >>> import re >>> >>> sequence = 'ATGATATATATATA' >>> >>> if re.search('ATG', sequence): ... print("Motif trouvé !") ... Motif trouvé ! ``` --- # Fonction match()
La fonction
match()
du module re permet de
chercher un motif au début
d'une chaîne de caractères.
```python >>> import re >>> >>> sequence = 'ATGATATATATATA' >>> >>> if re.match('ATG', sequence): ... print("Motif trouvé au début !") ... 'Motif trouvé au début !' >>> >>> if re.match('TAG', sequence): ... print("Motif trouvé au début !") ... >>> ``` --- # Fonction compile()
La fonction
compile()
du module re permet de
compiler l'expression régulière
avant de l'utiliser. Ceci est pratique lorsque l'on teste la même expression régulière sur un grand nombre de chaînes de caractères.
```python >>> import re >>> regex = re.compile('^ATG') >>> >>> sequence = 'ATGATATATATATA' >>> if regex.search(sequence): ... print("Motif trouvé au début !") ... 'Motif trouvé au début !' >>> >>> sequence2 = 'TGATAGCATCGATCGATGC' >>> if regex.search(sequence2): ... print("Motif trouvé au début !") ... >>> ``` --- # Les groupes ```python >>> import re >>> regex = re.compile('([A-Z]{2})([0-9]{1,2})G([0-9]{5})') >>> resultat = regex.search('AT5G25476') >>> resultat.group(0) 'AT5G25476' >>> resultat.group(1) 'AT' >>> resultat.group(2) '5' >>> resultat.group(3) '25476' >>> >>> resultat.start() 0 >>> resultat.end() 9 ```
Remarques :
.group(0) retourne toute la correspondance.
.group(1) retourne le premier élément, .group(2) le 2ème et ainsi de suite.
.start() et .end() retournent la position de début et de fin de la zone qui correspond à l'expression régulière.
--- # Les groupes nommés
Afin de faciliter la récupération des groupes, il est possible de les nommer.
```python >>> import re >>> regex = re.compile('(?P
[A-Z]{2})(?P
[0-9]{1,2})G(?P
[0-9]{5})') >>> >>> resultat = regex.search('AT5G25476') >>> >>> resultat.group('sp') 'AT' >>> resultat.group('chr') '5' >>> resultat.group('pos') '25476' ``` --- # Méthode .sub()
La méthode
.sub()
du module re permet de
substituer une expression par une autre
au sein d’une chaîne de caractères.
```python >>> import re >>> >>> seq = 'ATGGTAGATAG' >>> >>> seq = re.sub('AT', 'TOTO', seq) >>> seq 'TOTOGGTAGTOTOAG' ``` --- # Travaux Pratiques
Créer un programme Python nommé
regex.py
ou un
notebook
Jupyter nommé
regex.ipynb
permettant d'isoler les
features
présents dans un fichier au format GenBank afin de générer un fichier au format tabulé contenant les informations suivantes :
le nom du
feature
la position de début
la position de fin
le sens du brin
le type de
feature
la longueur du
feature