Je ne suis pas un expert en expression régulière, en plus, je ne
développe pas en Perl, mais je me suis dis que les développeurs Perl
étant des experts en expressions régulières, l'un d'entre eux va
surement pouvoir m'aider ;-)
Je cherche un moyen de rechercher de façon efficace un mot dans une
page html (contenant, hélas, des tags HTML).
Je procéde donc en deux temps :
1) élimination des tags (hum) avec cette expression : "<(.|\n)+?>" (a
chaque occurence, je remplace par "")
2) recherche du mot, alors là, empiriquement, j'arrive a cette
expression usinagazesque :
(?<=[\s>(, ':.?!]) + mon_mot_recherché + (?=[\s<, ):.?!])
Expression qui, au passage ne fonctionne pas si le mot en question
commence ou termine mon buffer... (et surement dans d'autres cas)
Ma question est simple : peut-on faire plus simple et que ca marche
;-))) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jacques Caron
Salut,
On Thu, 13 Oct 2005 23:08:29 +0200, Thierry Schembri wrote:
Je ne suis pas un expert en expression régulière, en plus, je ne développe pas en Perl, mais je me suis dis que les développeurs Perl étant des experts en expressions régulières, l'un d'entre eux va surement pouvoir m'aider ;-)
Va falloir nous dire de quel type d'expressions régulières il s'agit, alors, parce que perl a pas mal d'extensions qui ne sont pas dans les expressions régulières "standard". Et même dans les regexp "standard", il va falloir nous dire au moins si ce sont des regexp "basiques" ou "étendues". Idéalement, il faudrait nous dire quel est le langage ou logiciel utilisé, il y a souvent tout plein de petites subtilités...
Je cherche un moyen de rechercher de façon efficace un mot dans une page html (contenant, hélas, des tags HTML).
Je procéde donc en deux temps :
1) élimination des tags (hum) avec cette expression : "<(.|n)+?>" (a chaque occurence, je remplace par "")
a. la meilleure solution est d'utiliser un parser HTML, parce qu'avec ce genre de regexp tu vas avoir de mauvaises surprises, c'est garanti. b. Sinon, en perl, un bête s/<.*>//gs ferait l'affaire. c. Note que comme il semblerait que tu cherches un mot "isolé" (i.e. pas une partie de mot), il vaudrait mieux remplacer par un espace que par rien, sinon tu vas coller des mots.
2) recherche du mot, alors là, empiriquement, j'arrive a cette expression usinagazesque : (?<=[s>(, ':.?!]) + mon_mot_recherché + (?=[s<, ):.?!])
Euh, c'est quoi le but du jeu, trouver le mot "isolé" et pas un morceau de mot? En perl, /bmotrechercheb/ suffit. Sinon de façon plus générique je pense que /[[:<:]]motrecherche[[:>:]]/ doit faire l'affaire, à condition d'avoir la bonne locale bien entendu.
Expression qui, au passage ne fonctionne pas si le mot en question commence ou termine mon buffer... (et surement dans d'autres cas)
Ma question est simple : peut-on faire plus simple et que ca marche ;-))) ?
RTFM?
Jacques. -- Oxado http://www.oxado.com/
Salut,
On Thu, 13 Oct 2005 23:08:29 +0200, Thierry Schembri
<tschembri@hydromail.net> wrote:
Je ne suis pas un expert en expression régulière, en plus, je ne
développe pas en Perl, mais je me suis dis que les développeurs Perl
étant des experts en expressions régulières, l'un d'entre eux va
surement pouvoir m'aider ;-)
Va falloir nous dire de quel type d'expressions régulières il s'agit,
alors, parce que perl a pas mal d'extensions qui ne sont pas dans les
expressions régulières "standard". Et même dans les regexp "standard", il
va falloir nous dire au moins si ce sont des regexp "basiques" ou
"étendues". Idéalement, il faudrait nous dire quel est le langage ou
logiciel utilisé, il y a souvent tout plein de petites subtilités...
Je cherche un moyen de rechercher de façon efficace un mot dans une page
html (contenant, hélas, des tags HTML).
Je procéde donc en deux temps :
1) élimination des tags (hum) avec cette expression : "<(.|n)+?>" (a
chaque occurence, je remplace par "")
a. la meilleure solution est d'utiliser un parser HTML, parce qu'avec ce
genre de regexp tu vas avoir de mauvaises surprises, c'est garanti.
b. Sinon, en perl, un bête s/<.*>//gs ferait l'affaire.
c. Note que comme il semblerait que tu cherches un mot "isolé" (i.e. pas
une partie de mot), il vaudrait mieux remplacer par un espace que par
rien, sinon tu vas coller des mots.
2) recherche du mot, alors là, empiriquement, j'arrive a cette
expression usinagazesque :
(?<=[s>(, ':.?!]) + mon_mot_recherché + (?=[s<, ):.?!])
Euh, c'est quoi le but du jeu, trouver le mot "isolé" et pas un morceau de
mot?
En perl, /bmotrechercheb/ suffit. Sinon de façon plus générique je pense
que /[[:<:]]motrecherche[[:>:]]/ doit faire l'affaire, à condition d'avoir
la bonne locale bien entendu.
Expression qui, au passage ne fonctionne pas si le mot en question
commence ou termine mon buffer... (et surement dans d'autres cas)
Ma question est simple : peut-on faire plus simple et que ca marche
;-))) ?
On Thu, 13 Oct 2005 23:08:29 +0200, Thierry Schembri wrote:
Je ne suis pas un expert en expression régulière, en plus, je ne développe pas en Perl, mais je me suis dis que les développeurs Perl étant des experts en expressions régulières, l'un d'entre eux va surement pouvoir m'aider ;-)
Va falloir nous dire de quel type d'expressions régulières il s'agit, alors, parce que perl a pas mal d'extensions qui ne sont pas dans les expressions régulières "standard". Et même dans les regexp "standard", il va falloir nous dire au moins si ce sont des regexp "basiques" ou "étendues". Idéalement, il faudrait nous dire quel est le langage ou logiciel utilisé, il y a souvent tout plein de petites subtilités...
Je cherche un moyen de rechercher de façon efficace un mot dans une page html (contenant, hélas, des tags HTML).
Je procéde donc en deux temps :
1) élimination des tags (hum) avec cette expression : "<(.|n)+?>" (a chaque occurence, je remplace par "")
a. la meilleure solution est d'utiliser un parser HTML, parce qu'avec ce genre de regexp tu vas avoir de mauvaises surprises, c'est garanti. b. Sinon, en perl, un bête s/<.*>//gs ferait l'affaire. c. Note que comme il semblerait que tu cherches un mot "isolé" (i.e. pas une partie de mot), il vaudrait mieux remplacer par un espace que par rien, sinon tu vas coller des mots.
2) recherche du mot, alors là, empiriquement, j'arrive a cette expression usinagazesque : (?<=[s>(, ':.?!]) + mon_mot_recherché + (?=[s<, ):.?!])
Euh, c'est quoi le but du jeu, trouver le mot "isolé" et pas un morceau de mot? En perl, /bmotrechercheb/ suffit. Sinon de façon plus générique je pense que /[[:<:]]motrecherche[[:>:]]/ doit faire l'affaire, à condition d'avoir la bonne locale bien entendu.
Expression qui, au passage ne fonctionne pas si le mot en question commence ou termine mon buffer... (et surement dans d'autres cas)
Ma question est simple : peut-on faire plus simple et que ca marche ;-))) ?
RTFM?
Jacques. -- Oxado http://www.oxado.com/
Paul Gaborit
À (at) Fri, 14 Oct 2005 00:11:05 +0200, "Jacques Caron" écrivait (wrote): [...]
b. Sinon, en perl, un bête s/<.*>//gs ferait l'affaire. c. Note que comme il semblerait que tu cherches un mot "isolé" (i.e. pas une partie de mot), il vaudrait mieux remplacer par un espace que par rien, sinon tu vas coller des mots.
Donc :
s/<.*?>/ /gs;
Pour que ça marche (à peu près) il faut désactiver la gourmandise (ou « gloutonnerie ») du quantificateur.
On Thu, 13 Oct 2005 23:08:29 +0200, Thierry Schembri wrote: [...]
Ma question est simple : peut-on faire plus simple et que ca marche ;-))) ?
Pour que ça marche... *à* *tous* *les* *coups*, la seule bonne solution est un parseur HTML. C'est effectivement plus simple à utiliser. ;-)
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 14 Oct 2005 00:11:05 +0200,
"Jacques Caron" <jc@oxado.com> écrivait (wrote):
[...]
b. Sinon, en perl, un bête s/<.*>//gs ferait l'affaire.
c. Note que comme il semblerait que tu cherches un mot "isolé"
(i.e. pas une partie de mot), il vaudrait mieux remplacer par un
espace que par rien, sinon tu vas coller des mots.
Donc :
s/<.*?>/ /gs;
Pour que ça marche (à peu près) il faut désactiver la gourmandise (ou
« gloutonnerie ») du quantificateur.
On Thu, 13 Oct 2005 23:08:29 +0200, Thierry Schembri
<tschembri@hydromail.net> wrote:
[...]
Ma question est simple : peut-on faire plus simple et que ca marche
;-))) ?
Pour que ça marche... *à* *tous* *les* *coups*, la seule bonne
solution est un parseur HTML. C'est effectivement plus simple à
utiliser. ;-)
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 14 Oct 2005 00:11:05 +0200, "Jacques Caron" écrivait (wrote): [...]
b. Sinon, en perl, un bête s/<.*>//gs ferait l'affaire. c. Note que comme il semblerait que tu cherches un mot "isolé" (i.e. pas une partie de mot), il vaudrait mieux remplacer par un espace que par rien, sinon tu vas coller des mots.
Donc :
s/<.*?>/ /gs;
Pour que ça marche (à peu près) il faut désactiver la gourmandise (ou « gloutonnerie ») du quantificateur.
On Thu, 13 Oct 2005 23:08:29 +0200, Thierry Schembri wrote: [...]
Ma question est simple : peut-on faire plus simple et que ca marche ;-))) ?
Pour que ça marche... *à* *tous* *les* *coups*, la seule bonne solution est un parseur HTML. C'est effectivement plus simple à utiliser. ;-)
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Thierry Schembri
D'abord merci d'avoir répondu, ça fait bien plaisir !
Idéalement, il faudrait nous dire quel est le langage ou logiciel utilisé, il y a souvent tout plein de petites subtilités...
Le langage utilisé est C# avec le framework 2.0
a. la meilleure solution est d'utiliser un parser HTML, parce qu'avec ce genre de regexp tu vas avoir de mauvaises surprises, c'est garanti.
J'en ai, hélas, bien conscience, mais parser entierement chaque document à scanner risque d'être trop gourmand, tant pis si ce n'est pas "parfait à 100%" :-(
b. Sinon, en perl, un bête s/<.*>//gs ferait l'affaire.
merci du renseignement
Euh, c'est quoi le but du jeu, trouver le mot "isolé" et pas un morceau de mot?
Le but du jeu est de retrouver un mot (complet) ou éventuellement une expression (complete) : ie: si je cherche "toto", il ne doit pas retrouver le mot "tototo", si je cherche "bonjour toto", il ne doit pas retrouver "rebonjour tototo".
En perl, /bmotrechercheb/ suffit. Sinon de façon plus générique je pense que /[[:<:]]motrecherche[[:>:]]/ doit faire l'affaire, à condition d'avoir la bonne locale bien entendu.
J'essaye ça. Question de beotien, c'est quoi la bonne locale ?
D'abord merci d'avoir répondu, ça fait bien plaisir !
Idéalement, il faudrait nous dire quel est le langage ou logiciel utilisé,
il y a souvent tout plein de petites subtilités...
Le langage utilisé est C# avec le framework 2.0
a. la meilleure solution est d'utiliser un parser HTML, parce qu'avec ce
genre de regexp tu vas avoir de mauvaises surprises, c'est garanti.
J'en ai, hélas, bien conscience, mais parser entierement chaque
document à scanner risque d'être trop gourmand, tant pis si ce n'est
pas "parfait à 100%" :-(
b. Sinon, en perl, un bête s/<.*>//gs ferait l'affaire.
merci du renseignement
Euh, c'est quoi le but du jeu, trouver le mot "isolé" et pas un morceau de
mot?
Le but du jeu est de retrouver un mot (complet) ou éventuellement une
expression (complete) : ie: si je cherche "toto", il ne doit pas
retrouver le mot "tototo", si je cherche "bonjour toto", il ne doit pas
retrouver "rebonjour tototo".
En perl, /bmotrechercheb/ suffit. Sinon de façon plus générique je pense
que /[[:<:]]motrecherche[[:>:]]/ doit faire l'affaire, à condition d'avoir
la bonne locale bien entendu.
J'essaye ça.
Question de beotien, c'est quoi la bonne locale ?
D'abord merci d'avoir répondu, ça fait bien plaisir !
Idéalement, il faudrait nous dire quel est le langage ou logiciel utilisé, il y a souvent tout plein de petites subtilités...
Le langage utilisé est C# avec le framework 2.0
a. la meilleure solution est d'utiliser un parser HTML, parce qu'avec ce genre de regexp tu vas avoir de mauvaises surprises, c'est garanti.
J'en ai, hélas, bien conscience, mais parser entierement chaque document à scanner risque d'être trop gourmand, tant pis si ce n'est pas "parfait à 100%" :-(
b. Sinon, en perl, un bête s/<.*>//gs ferait l'affaire.
merci du renseignement
Euh, c'est quoi le but du jeu, trouver le mot "isolé" et pas un morceau de mot?
Le but du jeu est de retrouver un mot (complet) ou éventuellement une expression (complete) : ie: si je cherche "toto", il ne doit pas retrouver le mot "tototo", si je cherche "bonjour toto", il ne doit pas retrouver "rebonjour tototo".
En perl, /bmotrechercheb/ suffit. Sinon de façon plus générique je pense que /[[:<:]]motrecherche[[:>:]]/ doit faire l'affaire, à condition d'avoir la bonne locale bien entendu.
J'essaye ça. Question de beotien, c'est quoi la bonne locale ?
Antoun
(...)
J'essaye ça. Question de beotien, c'est quoi la bonne locale ?
la locale est un paramètre précisant une série de petites normes sur le pays et/ou la langue à prendre en compte.
Par exemple, si je passe sans locale la regexp /paraw+/ sur le paragraphe ci-dessus, elle reconnaîtra "param", parce que par défaut w est équivalent à [a-zA-Z0-9_], et que "è" n'en fait donc pas partie.
Si je lui dis d'utiliser la locale française, "è" sera considéré comme équivalent à "e" et ma regex reconnaîtra donc "paramètre".
A noter que les locales sont définies par des normes POSIX.
(...)
J'essaye ça.
Question de beotien, c'est quoi la bonne locale ?
la locale est un paramètre précisant une série de petites normes sur le
pays et/ou la langue à prendre en compte.
Par exemple, si je passe sans locale la regexp /paraw+/ sur le
paragraphe ci-dessus, elle reconnaîtra "param", parce que par défaut w
est équivalent à [a-zA-Z0-9_], et que "è" n'en fait donc pas partie.
Si je lui dis d'utiliser la locale française, "è" sera considéré comme
équivalent à "e" et ma regex reconnaîtra donc "paramètre".
A noter que les locales sont définies par des normes POSIX.
J'essaye ça. Question de beotien, c'est quoi la bonne locale ?
la locale est un paramètre précisant une série de petites normes sur le pays et/ou la langue à prendre en compte.
Par exemple, si je passe sans locale la regexp /paraw+/ sur le paragraphe ci-dessus, elle reconnaîtra "param", parce que par défaut w est équivalent à [a-zA-Z0-9_], et que "è" n'en fait donc pas partie.
Si je lui dis d'utiliser la locale française, "è" sera considéré comme équivalent à "e" et ma regex reconnaîtra donc "paramètre".
A noter que les locales sont définies par des normes POSIX.