Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2652 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] aide sur un regex.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C#] aide sur un regex.

n°1872524
flclsd
Posté le 13-04-2009 à 20:26:08  profilanswer
 

Bonjour à tous, je débute avec les regex et je galére grave.. voici qq exemple  
 
un qui marche
 
dans mon code html voici le code original
 

Code :
  1. <html dir="ltr">


 
voici le code de mon regex qui fonctionne très bien
 

Code :
  1. Regex regexObj = new Regex("<html dir=\"(.*)\">" );


 
voici le code html original que je veux trouver

Code :
  1. <a href="./details.php?image_id=1363&amp;mode=search">


 
je veux récupérer 1363, voici un de mes codes regex qui ne marche pas !

Code :
  1. new Regex("<a href=\"./details.php?image_id=([.]*)&amp" );


 
j'en ai essayer plein mais je n'y arrive pas merci de votre aide, l'id est toujours composé de chiffres.


Message édité par flclsd le 13-04-2009 à 20:26:36
mood
Publicité
Posté le 13-04-2009 à 20:26:08  profilanswer
 

n°1872579
Kormyr
Posté le 14-04-2009 à 01:57:28  profilanswer
 

Simple problème d'échappement de caractères. Tu as bien échappé les guillemets mais pas le "." ni le "?"
 
Quand tu as un doute sur un caractère, pour être tranquille, pense toujours à l'échapper.
 

Code :
  1. new Regex("\<a href\=\"\.\/details\.php\?image_id\=([.]*)\&amp" )


Message édité par Kormyr le 14-04-2009 à 02:02:36
n°1872621
flclsd
Posté le 14-04-2009 à 09:47:36  profilanswer
 

merci de ta réponse, j'ai cru comprendre les caractères d'échappement donc j'ai essayé et ca ne marche pas, j'ai copier le code que tu m'indique et ca ne marche pas non plus,  
 
le code apparait surligné en rouge et me retourne une erreur sur la séquence d'échappement.

n°1872622
Taz
bisounours-codeur
Posté le 14-04-2009 à 09:48:26  profilanswer
 

.+?

n°1872623
masklinn
í dag viðrar vel til loftárása
Posté le 14-04-2009 à 09:48:41  profilanswer
 

Le HTML c'est comme le XML, ça se parse pas avec des regex [:sadnoir]

 

Sinon, image_id=(\d+)


Message édité par masklinn le 14-04-2009 à 09:49:55

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1872715
Kormyr
Posté le 14-04-2009 à 11:44:43  profilanswer
 

@ flclsd : C'est quoi comme erreur ?
@Masklinn : oui en effet \d+ fait plus "propre", cependant .* devrait avoir le même effet, même s'il accepte plus de possibilités.

n°1872720
Taz
bisounours-codeur
Posté le 14-04-2009 à 11:48:38  profilanswer
 

Kormyr a écrit :

@ flclsd : C'est quoi comme erreur ?
@Masklinn : oui en effet \d+ fait plus "propre", cependant .* devrait avoir le même effet, même s'il accepte plus de possibilités.


Sauf que ? sinon il te bouffe tout

n°1872736
masklinn
í dag viðrar vel til loftárása
Posté le 14-04-2009 à 12:03:16  profilanswer
 

Kormyr a écrit :

cependant .* devrait avoir le même effet, même s'il accepte plus de possibilités.


Ben non, \d+ s'arrête quand il n'a plus de chiffres à consommer (donc juste avant le "&" ), alors que ".*" va jusqu'au bout de la page [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1872750
Kormyr
Posté le 14-04-2009 à 12:12:26  profilanswer
 

Code :
  1. Regex r = new Regex("<a href=\"\\./details\\.php\\?image_id=(\\d+)&" );


 
Il faut 2 "\", sinon en effet le & est facultatif avec \d


Message édité par Kormyr le 14-04-2009 à 12:14:10
n°1872959
flclsd
Posté le 14-04-2009 à 18:41:14  profilanswer
 

ok, je teste ca se soir, je suis au taff la ..
 

Code :
  1. <img src="./data/media/1/mon_image.jpg" border="1" alt="" width="" height="" /><br />


 
 l'autre regex que j'ai a faire est pour récuperer ce qui suit media/ dans le code ci dessus, est ce qu'on est d'accord que cette regex devrait fonctionner.
 

Code :
  1. new Regex("<img src=\"\\./data/media/(.*)\"" );

mood
Publicité
Posté le 14-04-2009 à 18:41:14  profilanswer
 

n°1872960
masklinn
í dag viðrar vel til loftárása
Posté le 14-04-2009 à 18:45:03  profilanswer
 

Non mais stop, arrêtes d'utiliser des regex pour ça [:sisicaivrai]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1872963
flclsd
Posté le 14-04-2009 à 18:51:13  profilanswer
 

lol, je débute et il y a que ca que j'arrive à peu près a comprendre.. :-)
j'ai que ces 2 lignes à récuperer, c tout..
 
tu me suggére d'utiliser quoi ?

Message cité 1 fois
Message édité par flclsd le 14-04-2009 à 18:51:31
n°1872967
masklinn
í dag viðrar vel til loftárása
Posté le 14-04-2009 à 19:06:48  profilanswer
 

flclsd a écrit :

lol, je débute et il y a que ca que j'arrive à peu près a comprendre.. :-)
j'ai que ces 2 lignes à récuperer, c tout..

 

tu me suggére d'utiliser quoi ?


Une lib qui sait parser du HTML (il y a ptet même ça directement dans le framework)

 

edit: http://htmlagilitypack.codeplex.com/ par exemple, qui permet de faire des queries XPath.


Message édité par masklinn le 14-04-2009 à 19:09:04

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1872972
Kormyr
Posté le 14-04-2009 à 19:34:07  profilanswer
 

Si quelqu'un connais un équivalent intégré au framework ça m'intéresse, ça serait quand même bizarre que personne n'y ait pensé.
 
Sinon pour apprendre les regexp les pages HTML c'est pas mal ^^

n°1873006
flclsd
Posté le 14-04-2009 à 21:52:49  profilanswer
 

bon je continue dans ma galére.. c baléze quand meme les regex  :lol:  
 
pour ce code html la  

Code :
  1. <img src="./data/media/1/mon_image.jpg" border="1" alt="" width="" height="" /><br />
  2. [code]
  3. j'utilise ce regex que j'avais indiqué :
  4. [code]
  5. new Regex("<img src=\"\\./data/media/(.*)\"" );


 
ca fonctionne bien, mais je récupere toute la fin de la chaine

Code :
  1. " border="1" alt="" width="" height="" /><br />

qui ne m'interresse pas et j'arrive pas à m'arreter juste avant le " cad juste

Code :
  1. 1/mon_image.jpg


 
j'ai essaye entre autre ca :  
 

Code :
  1. new Regex("<img src=\"\\./data/media/(.*)[\"]$" );

 
 
mais comme vous le devinez ca marche pas !!
 

n°1873010
masklinn
í dag viðrar vel til loftárása
Posté le 14-04-2009 à 22:04:24  profilanswer
 

flclsd a écrit :

bon je continue dans ma galére.. c baléze quand meme les regex  :lol:


C'est surtout complètement con de les utiliser pour parser du HTML, mais bon apparement tu t'en fous.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1873011
flclsd
Posté le 14-04-2009 à 22:05:57  profilanswer
 

c'est pas que je m'en fous, mais je regarderais une autre solution quand j'aurais bcq plus de code a parser.. pour 2 lignes les regex ca le fait ! et c rapide donc..

n°1873013
Kormyr
Posté le 14-04-2009 à 22:12:14  profilanswer
 

J'en ai essayé 2 qui marchent :
 

Code :
  1. Regex r = new Regex("<img src=\"\\./data/media/(.*)\" border" );


 

Code :
  1. Regex r = new Regex("<img src=\"\\./data/media/(.*\\.jpg)" );


 
La 2e est mieux si tu est sûr d'avoir des jpg

n°1873530
flclsd
Posté le 15-04-2009 à 20:58:01  profilanswer
 

merci bcq monsieur !! va falloir que je travaille mes regex !-)

n°1877882
TotalRecal​l
Posté le 26-04-2009 à 11:55:08  profilanswer
 

En admettant que tu conserves le parse par regex (ce que moi aussi je trouve très maladroit dans ton cas, tu ferais mieux d'interpréter tes fichiers comme étant du XML avec XPath ou LINQ to xml, ou même d'utiliser une lib dédiée au  HTML), tu devrais préfixer toutes tes regex par "@", ce qui a pour effet de désactiver dans la chaîne les séquences d'échappement au niveau du compilo, ce qui t'épargnerait de devoir échapper (compilo) des séquences d'échappement (regex) :sarcastic:, comme tu le fais avec "\\.".


Message édité par TotalRecall le 26-04-2009 à 11:55:26

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°1879702
flclsd
Posté le 30-04-2009 à 13:46:39  profilanswer
 

le code de Kormyr fonctionne très bien par contre je viens de rencontrer un problème si l'image commence par un chiffre :
 
rappel du regex utilisé :  
 

Code :
  1. Regex r = new Regex("<img src=\"\\./data/media/(.*\\.jpg)" );


 
lecture de code fontionne très bien :
 

Code :
  1. <img src="./data/media/1/Erasure.jpg" border="1" alt="Erasure" /><br />


 
mais celui ci ne marche pas, la seule différence dans ce cas est le 2, j'ai essayé plusieurs ca si ca commence par un chiffre ca ne marche pas .. bizzare quand meme..
 

Code :
  1. <img src="./data/media/1/2_Erasure.jpg" border="1" alt="2 Erasure"  /><br />


 
@ TotalRecall, je vais utiliser le @ merci de l'astuce.


Message édité par flclsd le 30-04-2009 à 13:46:56
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] aide sur un regex.

 

Sujets relatifs
[C] Comment éviter les warnings pour "déclaration implicite de"pointeur et fonction langage C
exercice pointeur et fonction langage Cexercice pointeur et fonction langage C
C++ et pointeurs, problème pour désalouer...[C] Initialisation d'un tableau constant
[C] Parser un fichier texte[C - librairie Gtk] mettre en place une GtkListStore
Plus de sujets relatifs à : [C#] aide sur un regex.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR