[R] Regex - Inetget - balises html - variation de code

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JulienBoul
Niveau 4
Niveau 4
Messages : 68
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

[R] Regex - Inetget - balises html - variation de code

#1

Message par JulienBoul » jeu. 09 août 2018 13:14

Bonjour à tous,

Je cherche à extraire une référence du code source d'un site web:

Code : Tout sélectionner

<span style="font-size: 10px;"><b><span style="color: rgb(0, 0, 128);">* Code produit : ABCDEFGH</span></b><br></span><br></p>
J'utilise l'expression régulière suivante et ça fonctionne:
Code produit : (.*)<\/span><\/span><\/b
Par contre je suis super embêté car parfois, le code source varie, et il me faudrait dire quelque chose comme: "Expression régulière 1 ou par défaut, expression régulière 2".
J'ai essayé le code suivant:
Code produit : (.*)<\/span><\/span><\/b><br> <br>|Code produit : (.*)<\/span><\/b
Mais ca ne fonctionne pas, je dois pas être si loin si?...

Voici un exemple de variante de code source (c'est mal codé non? Ce sont des fiches produit, elles sont censés avoir toutes le même schéma non?)

Code : Tout sélectionner

color: rgb(0, 0, 128); "><span style="font-size: 10px; ">* Code produit : HGFEDCBA</span></span></b><br> <br>
A noter que je ne veux pas m'appuyer sur la référence uniquement (son format) car il est susceptible de varier énormément d'un fournisseur à l'autre, donc il ne faut pas approfondir cette piste.

D'avance merci, @ Bientôt.
Julien.
Modifié en dernier par JulienBoul le ven. 10 août 2018 08:46, modifié 1 fois.

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5740
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Regex - Inetget - balises html - variation de code

#2

Message par mikell » jeu. 09 août 2018 14:13

Tu peux travailler le regex, par exemple en prenant après "Code produit : " tous les caractères qui ne sont pas un "<"

$s1 = '<span style="font-size: 10px;"><b><span style="color: rgb(0, 0, 128);">* Code produit : ABCDEFGH</span></b><br></span><br></p>'

$s2 = 'color: rgb(0, 0, 128); "><span style="font-size: 10px; ">* Code produit : HGFEDCBA</span></span></b><br> <br>'

$res1 = StringRegExpReplace($s1, '.*Code produit : ([^<]+).*', "$1")
$res2 = StringRegExpReplace($s2, '.*Code produit : ([^<]+).*', "$1")

Msgbox(0,"", $res1 & @crlf & $res2)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

JulienBoul
Niveau 4
Niveau 4
Messages : 68
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: Regex - Inetget - balises html - variation de code

#3

Message par JulienBoul » jeu. 09 août 2018 15:17

Ha ouai Mikell, carrément, merci bcp, je teste ça demain mais l'approche me semble adaptée.

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 571
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: Regex - Inetget - balises html - variation de code

#4

Message par walkson » jeu. 09 août 2018 18:12

Bonjour,
Bien que le maitre incontesté du Regex soit Jchd et son adjoint, Mikell, je me permets mon humble contribution :mrgreen:

Code : Tout sélectionner

#include <Array.au3>
$s1 = '<span style="font-size: 10px;"><b><span style="color: rgb(0, 0, 128);">* Code produit : ABCDEFGH</span></b><br></span><br></p>' & @CRLF & _
'color: rgb(0, 0, 128); "><span style="font-size: 10px; ">* Code produit : HGFEDCBA</span></span></b><br> <br>'  & @CRLF & _
'<span style="font-size: 10px;"><b><span style="color: rgb(0, 0, 128);">* Code produit : ABWWWWWWW</span></b><br></span><br></p>'  & @CRLF & _
'<span style="font-size: 10px; ">* Code produit : 123456789</span>'

$res1 = StringRegExp($s1, '.Code produit : ([^<]+)?+', 3)
_ArrayDisplay($res1)
Cela permet de contrôler l'ensemble du code HTML mais je suis peut être hors sujet et je ne suis pas un expert en Regex :mrgreen:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5740
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Regex - Inetget - balises html - variation de code

#5

Message par mikell » jeu. 09 août 2018 19:13

La version "array" de mon regex serait
StringRegExp($s1, 'Code produit : ([^<]+)', 3)
Pourrais-tu expliquer en détail ton expression, et la différence par rapport à la mienne ? Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Samuel78
Niveau 1
Niveau 1
Messages : 1
Enregistré le : sam. 11 août 2018 21:50
Status : Hors ligne

Re: Regex - Inetget - balises html - variation de code

#6

Message par Samuel78 » sam. 11 août 2018 23:02

mikell a écrit :
jeu. 09 août 2018 14:13
Tu peux travailler le regex, par exemple en prenant après "Code produit : " tous les caractères qui ne sont pas un "<"

$s1 = '<span style="font-size: 10px;"><b><span style="color: rgb(0, 0, 128);">* Code produit : ABCDEFGH</span></b><br></span><br></p>'

$s2 = 'color: rgb(0, 0, 128); "><span style="font-size: 10px; ">* Code produit : HGFEDCBA</span></span></b><br> <br>'

$res1 = StringRegExpReplace($s1, '.*Code produit : ([^<]+).*', "$1")
$res2 = StringRegExpReplace($s2, '.*Code produit : ([^<]+).*', "$1")

Msgbox(0,"", $res1 & @crlf & $res2)
transfers reims
Merci beaucoup, ça aide

Répondre