PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → [WD22] Aide expression régulière
[WD22] Aide expression régulière
Iniciado por Wahib, 19,jul. 2018 15:28 - 3 respuestas
Miembro registrado
45 mensajes
Popularité : +2 (2 votes)
Publicado el 19,julio 2018 - 15:28
Bonjour,

J'ai un souci avec une regex.
Je dois isoler les éléments d'une certaine couleur dans du RTF.
Voici mon texte :
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}
{\colortbl ;\red0\green0\blue0;\red64\green85\blue141;\red0\green30\blue196;}
{\*\generator Riched20 10.0.17134}\viewkind4\uc1 
\pard\cf1 Elem1\cf2 Hello \cf3 Elem2\par
2nd Liane : \cf3 Elem3\cf2\par
\cf3 Elem4\cf2 3rd\cf3 Elem5\cf2  Line : \cf3 Elem6\cf2\par
4th Line : \cf1 Elem7\cf0\par
}


Voici la regex que j'utilise :
(?<=\\cf[13] ).*?(?=\\cf.)


Je l'ai testée sur différent sites (https://regex101.com/ , https://www.regextester.com/ , https://regexr.com/ ,...) j'obtiens les résultats désirés sur ces sites, mais pas dans Windev.

Avez-vous une idée de la raison?
Merci d'avance.
Miembro registrado
948 mensajes
Popularité : +30 (92 votes)
Publicado el 19,julio 2018 - 15:54
#Delete
Mensaje modificado, 19,julio 2018 - 15:55
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 20,julio 2018 - 01:58
hello,
si dans windev tu utilises VérifieExpressionRégulière cela ne fonctionnera pas car la fonction ne gère pas
les expressions régulières avec des lookahead et lookbehind (voir ici
http://www.lilhoot.eu/regex-et-preg-assertions-avant-arriere-lookahead-lookbehind-assertions-recuperer-les-chaines,a3 )
Tu peux t'en sortir en utilisant dotnet :
1 - Inclure l'assemblage System dans son projet -> Atelier/.Net/Utiliser un assemblage .Net dans ce projet
2 - Cocher System
avec ce code :
ChaineAtester est une chaîne = [
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}
{\colortbl ;\red0\green0\blue0;\red64\green85\blue141;\red0\green30\blue196;}
{\*\generator Riched20 10.0.17134}\viewkind4\uc1
\pard\cf1 Elem1\cf2 Hello \cf3 Elem2\par
2nd Liane : \cf3 Elem3\cf2\par
\cf3 Elem4\cf2 3rd\cf3 Elem5\cf2 Line : \cf3 Elem6\cf2\par
4th Line : \cf1 Elem7\cf0\par
}
]
elem est un "System.Text.RegularExpressions".Match dynamique
MyRegexp est un "System.Text.RegularExpressions".Regex("(?<=\\cf[13] ).*?(?=\\cf.)")
matches est un "System.Text.RegularExpressions".MatchCollection dynamique = MyRegexp.Matches(ChaineAtester)
POUR TOUT elem de matches
Trace(elem.Value)
FIN

j'obtiens ceci :





c'est bien ce que je devais obtenir :





--
Ami calmant, J.P
Miembro registrado
45 mensajes
Popularité : +2 (2 votes)
Publicado el 20,julio 2018 - 10:28
Super! Un grand merci JP, ça m'est d'une grande aide :merci: