OVH Cloud OVH Cloud

Regex et HTML

6 réponses
Avatar
Boris Sargos
Salut à tous,

je souhaite récupérer automatiquement des données d'une page HTML
stockées sous forme de table, en utilisant les Regular Expressions.
Je recherche donc les occurences du genre :

<balise><la donnée recherchée</balise>

Cela est très simple si l'on connaît la balise. Dans le contraire, on
serait tenté d'écrire :

Regex.Matches(MyPage,"?<(<data>.+)>?");

Mais le problème est que sur une même ligne du fichier source, plusieurs
balises peuvent être concaténées :

<balise1><balise2><la donnée recherchée</balise2><balise1>

Auquel cas, cela devient difficile.

J'ai une solution simple : elle consiste à rechercher les occurences du
genre ".+ sauf <"

Ma question est donc : comment peut-on exclure un caractère précis dans
une recherche RegEx ?


Merci de votre aide.

6 réponses

Avatar
laurent.courbez
pour exclure un,

a => [^a]
a,b,5 => [^ab5]

etc ...

est ce suffisant ?


LC.


Boris Sargos a écrit :

Salut à tous,

je souhaite récupérer automatiquement des données d'une page HTML
stockées sous forme de table, en utilisant les Regular Expressions.
Je recherche donc les occurences du genre :

<balise><la donnée recherchée</balise>

Cela est très simple si l'on connaît la balise. Dans le contraire, on
serait tenté d'écrire :

Regex.Matches(MyPage,"?<(<data>.+)>?");

Mais le problème est que sur une même ligne du fichier source,
plusieurs balises peuvent être concaténées :

<balise1><balise2><la donnée recherchée</balise2><balise1>

Auquel cas, cela devient difficile.

J'ai une solution simple : elle consiste à rechercher les occurences
du genre ".+ sauf <"

Ma question est donc : comment peut-on exclure un caractère précis
dans une recherche RegEx ?


Merci de votre aide.


Avatar
Ambassadeur Kosh
> je souhaite récupérer automatiquement des données d'une page HTML
stockées sous forme de table, en utilisant les Regular Expressions.
Je recherche donc les occurences du genre :



salut boris.

pour simplifier on va dire que les regex refilent toujours l'occurence la
plus longue en résultat.
donc l'exclusion est salutaire

^<[^>.]>$

des réponses interessantes ont été fournies dans ce post sur ce meme forum

Thread-Topic: Supression des balise HTML (expression reguliere)
thread-index: AcTtiEeWst07AQC3QrKnuMvGqfAXxA==X-WBNR-Posting-Host:
217.136.241.220
From: "=?Utf-8?B?SkIuIERlc2NoYW1waGVsZWlyZQ==?="

Subject: Supression des balise HTML (expression reguliere)
Date: Wed, 29 Dec 2004 01:25:04 -0800

et moi, je me dis qu'un HtmlReader HtmlDocument, à l'image d'un XmlReader
XmlDocument, c'est bien plus sympa.
et, si ta page est bien formattée, c'est à dire assimilable à du Xml, tu
pourrais utiliser xsl ou System.Xml...

allez, A+
Avatar
Boris Sargos
C'est tout-à-fait ce que je cherchais,

merci Laurent.
Avatar
Boris Sargos
Salut Ambassadeur Kosh,

j'ai bien entendu scruté les récents messages du formum avant de poster
le mien, mais je n'ai rien vu qui aurait pu m'aider à résoudre mon
problème. Donc, merci pour ta réponse.

A bientôt.
Boris.
Avatar
Patrick Philippot
Bonjour,

Dans un autre thread de ce groupe ("Suppression des balises HTML"), le
problème du traitement des documents HTML par les expressions régulières
a été évoqué. J'ai indiqué que cela pouvait devenir *très* rapidement
*très* compliqué et qu'il valait mieux aborder le sujet en utilisant un
"vrai" parseur HTML.

J'ai cité quelques outils de génération de parseurs(Lex & Yacc, Flex /
Bison, , Visual Parse++, Programmar, AntLR, The Grammar Forge, etc) mais
en ce qui concerne HTML (qui pose un problème particulier) j'ai
également cité 2 outils qui permettent de traiter un document HTML comme
du XML, ce qui est bien plus simple pour chercher de l'info dans le
document:

The HTML Agility Pack
http://weblogs.asp.net/smourier/archive/2003/06/04/8265.aspx

SgmlReader
http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid¹0fddce-e60d-43f8-a5c4-c3bd760564bc

En outre, si vous persistez sur la voie des expressions régulières, il y
a 2 outils qui permettent de tester des expressions régulières sans
programmer:

Expresso (http://www.ultrapico.com/) et The Regulator
(http://weblogs.asp.net/rosherove/archive/2004/04/20/117069.aspx).

J'ai une préférence pour Expresso car The Regulator a une fâcheuse
tendance à se planter une fois sur deux.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
laurent.courbez
pour les regex, il y a aussi regex coach un bijou !!!
http://www.weitz.de/regex-coach/

LC.