[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 : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

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

#1

Message par JulienBoul »

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 09:46, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message par mikell »

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 : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

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

#3

Message par JulienBoul »

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 : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#4

Message par walkson »

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
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#5

Message par mikell »

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 22:50
Status : Hors ligne

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

#6

Message par Samuel78 »

mikell a écrit : jeu. 09 août 2018 15: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