Page 1 sur 1

[R] StringregExp Utiliser correctement l'opérateur "?"

Posté : mar. 03 févr. 2009 22:39
par SagePourpre
Bonjour à tous.

J'ai un petit soucis avec une expression régulière.


Le problème vient de $string2

Je dois récupérér une valeur dans un fichier *.htm et parfois, j'ai
"<B>" avant ma valeur, les autres fois il n'y est pas.

Voilà mon expression régulière. (qui marche avec $string mais pas avec $string2)

Code : Tout sélectionner

StringRegExp($string,'(?:Oi)(?:.*)\r\n(?:.*)\r\n(?:.*)\r\n(?:.*)>(?:<B>)(\d*)',1)
Pour régler le problème du "<B>" qui parfois apparait, parfois non, je croyais pouvoir
solutionner ce "caprice" de code en changeant "(?:<B>)" par "(?:<B>)?"

Je me suis basé sur cet extrait de la doc.

"?" The previous character, set or group may or may not appear. Equivalent to {0, 1}

donc, selon ma compréhension de la chose apparemment erronnée, il suffit d'ajouter
un point d'interrogation après un "set" pour signifier qu'il pourrait ne pas être présent.

Mais ça ne fonctionne pas .

Une idée ?


Pour résumer, mon code tel qu'il est permet de récupérer la valeur "109" de $string mais pas
de $string2. J'ai besoin d'être en mesure de solutionner les 2 cas avec la même expression.

(J'ai une solution alternative, consistant à faire disparaître tous les "<B>" du fichier avant
de lancer une expression régulière qui n'aurait plus à en tenir compte mais j'aimerais
le faire en une seule opération, question de rapidité.)

Merci d'avance pour vos suggestions. (Ça fait 3 heures que je penche sur le problème et
je ne suis pas parvenu à dénicher l'information qui me manque quant à l'utilisation de "?" )

Code : Tout sélectionner

#include<array.au3>
$string = '<TD align=left width=150 bgColor=#006699><B>Oi</B></TD>' & @CRLF & '<TD align=left bgColor=#006699><B>Elite Knight</B></TD>' & @CRLF & '<TD align=right width=30 bgColor=#006699><B>160</B></TD>' _
& @CRLF & '<TD align=right width=75 bgColor=#006699><B>109</B></TD></TR>' & @CRLF & '<TR onmouseover="cbc(this, 1)" onmouseout="cbc(this, 0)">'


$string2 = '<TD align=left width=150 bgColor=#006699><B>Oi</B></TD>' & @CRLF & '<TD align=left bgColor=#006699><B>Elite Knight</B></TD>' & @CRLF & '<TD align=right width=30 bgColor=#006699><B>160</B></TD>' _
& @CRLF & '<TD align=right width=75 bgColor=#006699>109</TD></TR>' & @CRLF & '<TR onmouseover="cbc(this, 1)" onmouseout="cbc(this, 0)">'






$arr = StringRegExp($string,'(?:Oi)(?:.*)\r\n(?:.*)\r\n(?:.*)\r\n(?:.*)>(?:<B>)(\d*)',1)
_ArrayDisplay($arr)


Edit : Après quatre heures et + de "gossage intensif" (en bon québécois) ou si vous préférez... Après quatre heures à tourner en rond, usant prématurément tapis et pantoufles, je parvint
à régler le problème en laissant tomber "?" et surtout, en changeant \d* pour \d+

Donc... le problème n'est plus. Merci encore !

Re: [R] StringregExp Utiliser correctement l'opérateur "?"

Posté : mer. 04 févr. 2009 00:20
par Tlem
Rassurez moi. Vous avez mis ce message en une seule fois, sans jamais l'avoir édité ?
Car j'ai beau regarder, je ne vois aucune trace d'édition de votre post !!!

Re: [R] StringregExp Utiliser correctement l'opérateur "?"

Posté : mer. 04 févr. 2009 00:22
par SagePourpre
Non... Je l'ai vraiment édité.

Sinon je ne l'aurais pas posté du tout en m'auto-répondant ainsi.

Cependant, je l'ai édité moins de 10 minutes après l'avoir posté.
Je ne sais pas si ce court délai aurait pu faire en sorte que ça ne
laisse pas de traces de mon édition mais pourtant...

Re: [R] StringregExp Utiliser correctement l'opérateur "?"

Posté : mer. 04 févr. 2009 00:46
par Tlem
Humm, dés que je rentre chez moi, je vais regarder ça d'un peut plus près..
Merci.