Page 1 sur 1

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

Posté : jeu. 09 août 2018 14:14
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.

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

Posté : jeu. 09 août 2018 15:13
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)

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

Posté : jeu. 09 août 2018 16:17
par JulienBoul
Ha ouai Mikell, carrément, merci bcp, je teste ça demain mais l'approche me semble adaptée.

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

Posté : jeu. 09 août 2018 19:12
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:

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

Posté : jeu. 09 août 2018 20:13
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

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

Posté : dim. 12 août 2018 00:02
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