Expression régulière avec caractère séparateur

Le
S R
Bonjour,

Je cherche une expression régilière à utiliser sur VB6 avec Vista. Je n'ai
pas vu de post sur regexp sur le groupe VB aussi je poste ici.

J'analyse un fichier gedcom et essaie de récupérer les prénoms et nom de
personne dans une ligne texte du genre :
1 NAME prénom1 prénom2 /patronyme/
normalement, le patronyme se repère comme étant encadré par deux /
l'embêtant est que parfois les prénoms composés sont aussi séparés par un /
ainsi
1 NAME Marie / Claude/DERMAIN/
quelle expression puis-je utiliser pour récupérer

- le patronyme seul
- les prénoms, séparément ou bien groupés comme ceci Marie / Claude (le
groupage me conviendrait mieux, sinon je saurai faire)

le problème le plus difficile pour moi est de récupérer le dernier mot
(voire plus si nom composé) encadré de deux /
pour le moment j'utilise
re.pattern ="1 NAME (.*)/(.*)/"
qui convient lorsqu'il n'y a pas de / entre les prénoms

PS, sur la version de VB6 et Vista que j'utilise :
- le groupage ne fonctionne pas
- si j'essaie d'activer le composant Microsoft script 1.0, j'ai un message
"impossible de charger "Cwindowssystem32 msscript.ocx" or pourtant il est
bien à cet endroit en version 1.0.0.18000 /1.0.0.6000 du 19/01/2008

Merci par avance
Cordialement
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
smr78
Le #11160561
"S R" a écrit :

Bonjour,

Je cherche une expression rgilire utiliser sur VB6 avec Vista. Je n'ai
pas vu de post sur regexp sur le groupe VB aussi je poste ici.

J'analyse un fichier gedcom et essaie de rcuprer les prnoms et nom de
personne dans une ligne texte du genre :
1 NAME prnom1 prnom2 /patronyme/
normalement, le patronyme se repre comme tant encadr par deux /
l'embtant est que parfois les prnoms composs sont aussi spars par un /
ainsi
1 NAME Marie / Claude/DERMAIN/
quelle expression puis-je utiliser pour rcuprer

- le patronyme seul
- les prnoms, sparment ou bien groups comme ceci Marie / Claude (le
groupage me conviendrait mieux, sinon je saurai faire)

le problme le plus difficile pour moi est de rcuprer le dernier mot
(voire plus si nom compos) encadr de deux /
pour le moment j'utilise
re.pattern ="1 NAME (.*)/(.*)/"
qui convient lorsqu'il n'y a pas de / entre les prnoms

PS, sur la version de VB6 et Vista que j'utilise :
- le groupage ne fonctionne pas
- si j'essaie d'activer le composant Microsoft script 1.0, j'ai un message
"impossible de charger "Cwindowssystem32 msscript.ocx" or pourtant il est
bien cet endroit en version 1.0.0.18000 /1.0.0.6000 du 19/01/2008

Merci par avance
Cordialement




Pour le moment, je m'en sors avec un split sur "/", mais j'aimerais bien
avoir une expression réglière pour faire plus joli, pour mieux comprendre.
Reste ma question sur l'installation de Microsoft script 1.0 qui je l'espère
me permettra d'utiliser le groupage afin de mémoriser seulement les mots
correspondant aux groupe
Cordialement
Gilles LAURENT [MVP]
Le #11162031
> > Bonjour,
>
> Je cherche une expression rgilire utiliser sur VB6 avec Vista. Je n'ai
> pas vu de post sur regexp sur le groupe VB aussi je poste ici.
>
> J'analyse un fichier gedcom et essaie de rcuprer les prnoms et nom de
> personne dans une ligne texte du genre :
> 1 NAME prnom1 prnom2 /patronyme/
> normalement, le patronyme se repre comme tant encadr par deux /
> l'embtant est que parfois les prnoms composs sont aussi spars par un /
> ainsi
> 1 NAME Marie / Claude/DERMAIN/
> quelle expression puis-je utiliser pour rcuprer
>
> - le patronyme seul
> - les prnoms, sparment ou bien groups comme ceci Marie / Claude (le
> groupage me conviendrait mieux, sinon je saurai faire)
>
> le problme le plus difficile pour moi est de rcuprer le dernier mot
> (voire plus si nom compos) encadr de deux /
> pour le moment j'utilise
> re.pattern ="1 NAME (.*)/(.*)/"
> qui convient lorsqu'il n'y a pas de / entre les prnoms
>
> PS, sur la version de VB6 et Vista que j'utilise :
> - le groupage ne fonctionne pas
> - si j'essaie d'activer le composant Microsoft script 1.0, j'ai un message
> "impossible de charger "Cwindowssystem32 msscript.ocx" or pourtant il est
> bien cet endroit en version 1.0.0.18000 /1.0.0.6000 du 19/01/2008
>
> Merci par avance
> Cordialement
>

Pour le moment, je m'en sors avec un split sur "/", mais j'aimerais bien
avoir une expression réglière pour faire plus joli, pour mieux comprendre.
Reste ma question sur l'installation de Microsoft script 1.0 qui je l'espère
me permettra d'utiliser le groupage afin de mémoriser seulement les mots
correspondant aux groupe
Cordialement



Bonjour,

En VBScript :

Set oRe=New RegExp
oRe.Pattern="NAME (.*/*.*) /(w*)/$"

sLine="1 NAME Marie / Claude /DERMAIN/"
'=> Marie / Claude
WScript.Echo oRe.Execute(sLine)(0).SubMatches(0)
'=> DERMAIN
WScript.Echo oRe.Execute(sLine)(0).SubMatches(1)

sLine="1 NAME Marie /DERMAIN/"
'=> Marie
WScript.Echo oRe.Execute(sLine)(0).SubMatches(0)
'=> DERMAIN
WScript.Echo oRe.Execute(sLine)(0).SubMatches(1)

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
smr78
Le #11187181
"Gilles LAURENT [MVP]" a écrit :

> > Bonjour,
> >
> > Je cherche une expression rgilire utiliser sur VB6 avec Vista. Je n'ai
> > pas vu de post sur regexp sur le groupe VB aussi je poste ici.
> >
> > J'analyse un fichier gedcom et essaie de rcuprer les prnoms et nom de
> > personne dans une ligne texte du genre :
> > 1 NAME prnom1 prnom2 /patronyme/
> > normalement, le patronyme se repre comme tant encadr par deux /
> > l'embtant est que parfois les prnoms composs sont aussi spars par un /
> > ainsi
> > 1 NAME Marie / Claude/DERMAIN/
> > quelle expression puis-je utiliser pour rcuprer
> >
> > - le patronyme seul
> > - les prnoms, sparment ou bien groups comme ceci Marie / Claude (le
> > groupage me conviendrait mieux, sinon je saurai faire)
> >
> > le problme le plus difficile pour moi est de rcuprer le dernier mot
> > (voire plus si nom compos) encadr de deux /
> > pour le moment j'utilise
> > re.pattern ="1 NAME (.*)/(.*)/"
> > qui convient lorsqu'il n'y a pas de / entre les prnoms
> >
> > PS, sur la version de VB6 et Vista que j'utilise :
> > - le groupage ne fonctionne pas
> > - si j'essaie d'activer le composant Microsoft script 1.0, j'ai un message
> > "impossible de charger "Cwindowssystem32 msscript.ocx" or pourtant il est
> > bien cet endroit en version 1.0.0.18000 /1.0.0.6000 du 19/01/2008
> >
> > Merci par avance
> > Cordialement
> >
>
> Pour le moment, je m'en sors avec un split sur "/", mais j'aimerais bien
> avoir une expression réglière pour faire plus joli, pour mieux comprendre.
> Reste ma question sur l'installation de Microsoft script 1.0 qui je l'espère
> me permettra d'utiliser le groupage afin de mémoriser seulement les mots
> correspondant aux groupe
> Cordialement

Bonjour,

En VBScript :

Set oRe=New RegExp
oRe.Pattern="NAME (.*/*.*) /(w*)/$"

sLine="1 NAME Marie / Claude /DERMAIN/"
'=> Marie / Claude
WScript.Echo oRe.Execute(sLine)(0).SubMatches(0)
'=> DERMAIN
WScript.Echo oRe.Execute(sLine)(0).SubMatches(1)

sLine="1 NAME Marie /DERMAIN/"
'=> Marie
WScript.Echo oRe.Execute(sLine)(0).SubMatches(0)
'=> DERMAIN
WScript.Echo oRe.Execute(sLine)(0).SubMatches(1)

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr



Bonjour,
Merci pour cette réponse très utile qui m'a permis de trouver la solution.

Heuh, je n'ai pas donné tous les détails, peut-être est-ce pour cela que
votre pattern marche bien avec votre exemple mais pas avec le texte complet,
sans doute parce qu'il y a des retours à la ligne, le record complet pour un
individu est par exemple :
175I@ INDI
1 NAME Marie / Claude/DERMAIN/
2 GIVN Marie / Claude
2 SURN DERMAIN
1 SEX F
1 BIRT
2 TYPE Naissance
2 DATE ABT 1726
1 FAMS @5463U@
1 FAMC @6122U@
1 NCHI 3
1 NMR 1
donc devant le 1 NAME, il y a un retour chariot/nouvelle ligne

Avec votre exemple sLine="1 NAME Marie / Claude /DERMAIN/", ça fonctionne,
mais avec cet exemple
sline="175I@ INDI" & chr(10) & "1 NAME Marie / Claude/DERMAIN/"
ça ne marche pas, alors que... avec mon pattern ça marche!

il suffisait seulement que j'ajoute les .SubMatches(0) et .SubMatches(1)
derrière re.Execute(record)(0)

Erreur de ma part, je pensais que les submatches s'appelaient grâce au "(0)"

Pour que votre pattern fonctionne, il a fallu que je modifie la fin et les
groupages, de la façon suivante :
oRe.Pattern="1 NAME (.*)/(.*)/(w*)"

Merci encore pour ce tuyau!

Cordialement
Publicité
Poster une réponse
Anonyme