SlideShare a Scribd company logo
1 of 3
Download to read offline
Mémo : Syntaxe des expressions régulières dans Openrefine 1/3
Mémo : Expressions régulières dans Openrefine
Auteur : Mathieu Saby
Licence CC-BY
Historique
V1.1 21/03/2019 Ajouts
V1 10/11/2018 Création, à compléter
La version d’Openrefine décrite est la 3.1.
Table des matières
1. Utilisation des expressions régulières dans Openrefine ..................................................................2
2. Syntaxe des expressions régulières.........................................................................................................2
3. Astuces et cas d’usage..................................................................................................................................3
Mémo : Syntaxe des expressions régulières dans Openrefine 2/3
1. Utilisation des expressions régulières dans Openrefine
Les expressions régulières (ou rationnelles) permettent de repérer, d'extraire et de remplacer des
motifs dans un texte.
Elles sont utilisables dans Openrefine:
 dans l'interface graphique :
o filtres
o facettes
o menu Remplacer
o menu Diviser les cellules multi-valuées
o menu Diviser en plusieurs colonnes
 dans certaines fonctions GREL :
o find ()
o match ()
o partition ()
o rpartition ()
o replace ()
o split ()
2. Syntaxe des expressions régulières
Nombreux documents en ligne et outils pour créer des expressions régulières. Cf. par exemple
http://cyberzoide.developpez.com/tutoriels/java/regex/ et regex101.com
Pour les détails de l’implémentation en Java, et donc en GREL, cf. la documentation officielle
https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html
Pour l’implémentation en Jython, cf http://www.jython.org/docs/library/re.html
Site pour construire et tester des expression régulières : https://regex101.com/
Site sur les expressions régulières en général https://www.regular-expressions.info/
Particularités par rapport à d’autres implémentations :
Il est possible d’utiliser les « références arrières » sous la forme n pour faire référence à un groupe
capturé par des parenthèses (voir https://www.regular-expressions.info/backref.html).
Ex en GREL :
"ABA".match(/(.)B1/) renverra ["A"]
"ABC".match(/(.)B1/) renverra null
"ABA".find(/(.)B1/) renverra ["ABA"]
"ABC".find(/(.)B1/) renverra null
Il est possible d’utiliser les « lookbehind » positifs et négatifs pour trouver un motif précédé ou non
précédé d’un autre.
Ex en GREL :
"BA".find(/(?<=B)A/) renverra ["A"]
"BA".find(/(?<!B)A/) renverra null
En GREL comme en Jython, les quantifieurs (*, +, ?, {x,y}) sont « gourmands » (greedy) par défaut (les
motifs sont répété un nombre maximum de fois) : il faut de les faire suivre de ? pour passer en mode
« non gourmand», ce qui est en général le comportement souhaité.
Mémo : Syntaxe des expressions régulières dans Openrefine 3/3
Ex. en GREL :
"xx1xx2xx".match(/.*(d).*/) renverra ["2"]
"xx1xx2xx".match(/.*?(d).*/) renverra ["1"]
Ex. en Jython :
import re
return re.findall(".*(d).*","xx1xx2xx") renverra ["2"]
return re.findall(".*?(d).*","xx1xx2xx") renverra ["1"]
En GREL dans la formule match(), l’expression régulière doit correspondre à l’ensemble de la chaîne
testée, sans troncature automatique à droite ni à gauche.
Ex :
"123abc456".match (/(a.c)/) renvoie null
"123abc456".match (/.*?(a.c)/) renvoie null
"123abc456".match (/.*?(a.c).*/) renvoie ["abc"]
La formule match() permet de « capturer » un ou plusieurs motifs en utilisant un ou plusieurs couples de
parenthèses, mais elle ne permet pas de capturer un motif répété un nombre indéfini de fois. Pour cela il
faut recourir à find() ou à Jython.
Ex. en GREL :
find("123abc456adc",/a.c/) renvoie ["abc","adc"]
Ex. en Jython :
import re
return re.findall("a.c","123abc456adc") renvoie ["abc","adc"]
3. Astuces et cas d’usage
Pour rechercher tout caractère Unicode y compris avec des diacritiques (mais pas les chiffres, la
ponctuation ni les symboles) utiliser p{L} au lieu de w
Pour rechercher les débuts ou fin de mots ou d’expressions, utiliser b

More Related Content

What's hot

Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
pierrepo
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
Emeric Tapachès
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
kader15
 

What's hot (12)

Nettoyer et transformer ses données avec Openrefine : partie 2
Nettoyer et transformer ses données avec Openrefine : partie 2Nettoyer et transformer ses données avec Openrefine : partie 2
Nettoyer et transformer ses données avec Openrefine : partie 2
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
 
Python après 15 ans de JAVA
Python après 15 ans de JAVAPython après 15 ans de JAVA
Python après 15 ans de JAVA
 
Php seance1
Php seance1Php seance1
Php seance1
 
Reanalyse Workflow
Reanalyse WorkflowReanalyse Workflow
Reanalyse Workflow
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appel
 
Linux Scripting
Linux Scripting Linux Scripting
Linux Scripting
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
StHack 2014 - Ninon Eyrolles Obfuscation 101
StHack 2014 - Ninon Eyrolles Obfuscation 101StHack 2014 - Ninon Eyrolles Obfuscation 101
StHack 2014 - Ninon Eyrolles Obfuscation 101
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 

Usage des expressions régulières dans Openrefine

  • 1. Mémo : Syntaxe des expressions régulières dans Openrefine 1/3 Mémo : Expressions régulières dans Openrefine Auteur : Mathieu Saby Licence CC-BY Historique V1.1 21/03/2019 Ajouts V1 10/11/2018 Création, à compléter La version d’Openrefine décrite est la 3.1. Table des matières 1. Utilisation des expressions régulières dans Openrefine ..................................................................2 2. Syntaxe des expressions régulières.........................................................................................................2 3. Astuces et cas d’usage..................................................................................................................................3
  • 2. Mémo : Syntaxe des expressions régulières dans Openrefine 2/3 1. Utilisation des expressions régulières dans Openrefine Les expressions régulières (ou rationnelles) permettent de repérer, d'extraire et de remplacer des motifs dans un texte. Elles sont utilisables dans Openrefine:  dans l'interface graphique : o filtres o facettes o menu Remplacer o menu Diviser les cellules multi-valuées o menu Diviser en plusieurs colonnes  dans certaines fonctions GREL : o find () o match () o partition () o rpartition () o replace () o split () 2. Syntaxe des expressions régulières Nombreux documents en ligne et outils pour créer des expressions régulières. Cf. par exemple http://cyberzoide.developpez.com/tutoriels/java/regex/ et regex101.com Pour les détails de l’implémentation en Java, et donc en GREL, cf. la documentation officielle https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html Pour l’implémentation en Jython, cf http://www.jython.org/docs/library/re.html Site pour construire et tester des expression régulières : https://regex101.com/ Site sur les expressions régulières en général https://www.regular-expressions.info/ Particularités par rapport à d’autres implémentations : Il est possible d’utiliser les « références arrières » sous la forme n pour faire référence à un groupe capturé par des parenthèses (voir https://www.regular-expressions.info/backref.html). Ex en GREL : "ABA".match(/(.)B1/) renverra ["A"] "ABC".match(/(.)B1/) renverra null "ABA".find(/(.)B1/) renverra ["ABA"] "ABC".find(/(.)B1/) renverra null Il est possible d’utiliser les « lookbehind » positifs et négatifs pour trouver un motif précédé ou non précédé d’un autre. Ex en GREL : "BA".find(/(?<=B)A/) renverra ["A"] "BA".find(/(?<!B)A/) renverra null En GREL comme en Jython, les quantifieurs (*, +, ?, {x,y}) sont « gourmands » (greedy) par défaut (les motifs sont répété un nombre maximum de fois) : il faut de les faire suivre de ? pour passer en mode « non gourmand», ce qui est en général le comportement souhaité.
  • 3. Mémo : Syntaxe des expressions régulières dans Openrefine 3/3 Ex. en GREL : "xx1xx2xx".match(/.*(d).*/) renverra ["2"] "xx1xx2xx".match(/.*?(d).*/) renverra ["1"] Ex. en Jython : import re return re.findall(".*(d).*","xx1xx2xx") renverra ["2"] return re.findall(".*?(d).*","xx1xx2xx") renverra ["1"] En GREL dans la formule match(), l’expression régulière doit correspondre à l’ensemble de la chaîne testée, sans troncature automatique à droite ni à gauche. Ex : "123abc456".match (/(a.c)/) renvoie null "123abc456".match (/.*?(a.c)/) renvoie null "123abc456".match (/.*?(a.c).*/) renvoie ["abc"] La formule match() permet de « capturer » un ou plusieurs motifs en utilisant un ou plusieurs couples de parenthèses, mais elle ne permet pas de capturer un motif répété un nombre indéfini de fois. Pour cela il faut recourir à find() ou à Jython. Ex. en GREL : find("123abc456adc",/a.c/) renvoie ["abc","adc"] Ex. en Jython : import re return re.findall("a.c","123abc456adc") renvoie ["abc","adc"] 3. Astuces et cas d’usage Pour rechercher tout caractère Unicode y compris avec des diacritiques (mais pas les chiffres, la ponctuation ni les symboles) utiliser p{L} au lieu de w Pour rechercher les débuts ou fin de mots ou d’expressions, utiliser b