[RegExp]Exclure les points

Exclure les points [RegExp] - Divers - Programmation

Marsh Posté le 13-04-2004 à 10:50:52    

Salut j'ai une liste de chaine ki a à peu de chose pres cette tete :  
 
/
/toto/
/titi/popo/
/toto.titi
/toto.titi?popo=123&lolo=321
 
Je cherche en vain comme ne prendre ke les chaines NE comportant AUCUN "."
 
:'(
 
Help me je suis desesperé :/
 
Mirci :)


---------------
:D
Reply

Marsh Posté le 13-04-2004 à 10:50:52   

Reply

Marsh Posté le 13-04-2004 à 11:13:38    

Faut lire un peu de docs :
http://www.p3b.org/tutor/oli/pytho [...] exp/a04ref
[^...]

Reply

Marsh Posté le 13-04-2004 à 11:44:37    

J'ai lu les docs, j'en suis pas à mes premieres regexp, si je demande c'est parce ke je trouve pas, et non par feignantise.
 
Le pb c'est pas de prendre j'usqu'au point c'est de virer toute la chaine contenant un point.
 
alors j'ai essayé plein de truc mais sans succes :/
 
genre : [^[:alnum:]+\.+[:alnum:]+]
 
et la je seche.


---------------
:D
Reply

Marsh Posté le 13-04-2004 à 11:52:52    

La question c'est : comment tu délimites ta chaîne qui contient le point? Comment tes chaînes sont elles délimitées? TU parles de plusieurs chaînes, comment tu les distingues entre elles?  

Reply

Marsh Posté le 13-04-2004 à 11:56:28    

C'est une liste donc je parcours ma liste et a chake fois j'ai une chaine.
 
Et si cette chaine contient un seul '.' je veux la faire sauter.


---------------
:D
Reply

Marsh Posté le 13-04-2004 à 12:16:21    

Ben au lieu de rechercher les chaines qui ont un point et de les éliminer,  tu fais une sélection des chaines qui ne contiennent pas  de points.

Reply

Marsh Posté le 13-04-2004 à 12:20:32    

chaica a écrit :

Ben au lieu de rechercher les chaines qui ont un point et de les éliminer,  tu fais une sélection des chaines qui ne contiennent pas  de points.


 
bah c'est exactement ce ke je veux faire mais j'y arrive pas  :cry:


---------------
:D
Reply

Marsh Posté le 13-04-2004 à 12:52:40    

Code :
  1. #!/usr/bin/python
  2. import re
  3. # la liste des chaines que l'on va etudier
  4. liste = ['hello.world','ca va la life','phrase.avec.un.point']
  5. print liste
  6. # notre regle
  7. regle = '\.'
  8. exp = re.compile( regle )
  9. # on parcourt la liste
  10. for phrase in liste:
  11. res = exp.findall( phrase )
  12. # si le resultat n est pas nul, on a un point dans notre phrase
  13. if res != [] :
  14.  index = liste.index(phrase)
  15.  # donc on supprime la phrase de notre liste
  16.  del liste[index]
  17. print liste


et en sortie j'ai :
chaica@desktop exos $ ./nopoint.py
['hello.world', 'ca va la life', 'phrase.avec.un.point']
['ca va la life']
 
donc on a bien éliminé les phrases sans point.


Message édité par chaica le 13-04-2004 à 12:55:06
Reply

Marsh Posté le 13-04-2004 à 13:00:53    

merci :)
 
le pb c'est ke je le fait en php et ke j'ai omis de le preciser :/


---------------
:D
Reply

Marsh Posté le 13-04-2004 à 13:16:19    

Oui enfin je t'ai donné l'idée, maintenant tu te débrouilles, hein. Avec les commentaire que j'ai mis tu peux avoir une idée de l'algo. Y'a pas marqué la poste :D


Message édité par chaica le 13-04-2004 à 13:18:40
Reply

Marsh Posté le 13-04-2004 à 13:16:19   

Reply

Marsh Posté le 13-04-2004 à 13:22:53    

chaica a écrit :

Oui enfin je t'ai donné l'idée, maintenant tu te débrouilles, hein. Avec les commentaire que j'ai mis tu peux avoir une idée de l'algo. Y'a pas marqué la poste :D


 
Le pb c'est pas de faire un algo, c'etait de trouver une expression ki serait capable de faire ce ke je veux sans rien de plus ;)


---------------
:D
Reply

Marsh Posté le 13-04-2004 à 13:36:11    

Code :
  1. [^\.]


 
[edit sinon tu peux toujours faire un not match sur \. ]


Message édité par anapajari le 13-04-2004 à 13:37:44
Reply

Marsh Posté le 13-04-2004 à 14:01:11    

Noda a écrit :

merci :)
 
le pb c'est ke je le fait en php et ke j'ai omis de le preciser :/

Excellente occasion pour elargir ton horizon.
A+,

Reply

Marsh Posté le 13-04-2004 à 20:07:23    

anapajari a écrit :

Code :
  1. [^\.]


 
[edit sinon tu peux toujours faire un not match sur \. ]


 
ca ca prend aussi ce ki precede le point ;)


---------------
:D
Reply

Marsh Posté le 13-04-2004 à 20:07:45    

gilou a écrit :

Excellente occasion pour elargir ton horizon.
A+,


 
Je ne peux pas changer de langage ;)


---------------
:D
Reply

Marsh Posté le 13-04-2004 à 23:50:56    

Noda a écrit :


 
ca ca prend aussi ce ki precede le point ;)


non ça décrit un motif "tout sauf point" enfin bon si tu sais pas te servir d'une regex pourquoi ne pas faire simplement

Code :
  1. if (! strstr($tonString, "." ) )
  2. {
  3. ...
  4. }


Reply

Marsh Posté le 14-04-2004 à 09:34:21    

anapajari a écrit :


non ça décrit un motif "tout sauf point" enfin bon si tu sais pas te servir d'une regex pourquoi ne pas faire simplement

Code :
  1. if (! strstr($tonString, "." ) )
  2. {
  3. ...
  4. }


 


 
ton truc ca va sortir :  
 
/  
/toto/  
/titi/popo/  
/toto
/toto
 
Je l'ai testé ;)


---------------
:D
Reply

Marsh Posté le 14-04-2004 à 10:14:50    

tu peux me montrer le code que tu as utilisé pour voir...

Reply

Marsh Posté le 19-04-2004 à 09:45:27    

anapajari a écrit :

tu peux me montrer le code que tu as utilisé pour voir...


 
desolé pour le temps de reponses :/
 
pour l'instant j'utilise :  
 
ereg('^/([^.]*).*',$string,$chunk) ;
 
mais ca prends egalement ce k'il y'a avant le point.
 
Est il possible d'exclure un motif ?


---------------
:D
Reply

Marsh Posté le 19-04-2004 à 14:43:21    

J'ai evolué vers :  
 
preg_match('/(\w+(?!\.))/i',$ligne,$chunk) ;
 
j'ai preske ce ke je veux.
 
Sauf ke la ca ne vire k'un seul caractere avant le "."


---------------
:D
Reply

Marsh Posté le 19-04-2004 à 15:16:28    

Noda a écrit :


Je cherche en vain comme ne prendre ke les chaines NE comportant AUCUN "."


 
et bien je le redis encore un fois pas besoin de regex, je suppute que tu as un while ( ou autre boucle) qui te fait traiter tes lignes une à une:

Code :
  1. while ( ...)
  2. {
  3.   if (! strstr($ligne, "." ) )
  4.   {
  5.     // si tu as envie de l'annuler: $ligne='';  
  6.     continue
  7.   }
  8.     ... ce que tu faisais des chaines que tu conservais ...
  9. }


Message édité par anapajari le 19-04-2004 à 15:17:00
Reply

Marsh Posté le 19-04-2004 à 15:33:28    

anapajari a écrit :


 
et bien je le redis encore un fois pas besoin de regex, je suppute que tu as un while ( ou autre boucle) qui te fait traiter tes lignes une à une:

Code :
  1. while ( ...)
  2. {
  3.   if (! strstr($ligne, "." ) )
  4.   {
  5.     // si tu as envie de l'annuler: $ligne='';  
  6.     continue
  7.   }
  8.     ... ce que tu faisais des chaines que tu conservais ...
  9. }




 
je peux pas faire ca car j'ai tout de meme besoin de connaitre l'existence de ces lignes ... :/
 
Je vois pas trop comment expliker. je vaus pas ejecter totalement la ligne si y'a un point.
 
je veux garder le / du debut de ligne.
 
D'ou le preg_match ;)


---------------
:D
Reply

Marsh Posté le 19-04-2004 à 16:00:44    

voila là c'est déjà plus clair:

Code :
  1. preg_match('/(.*?)\/(([^\/]*)\.([^\/]*))/',$ligne,$chunk) ;


$chunk[1] contient tout le debut jusqu'a dernier /
$chunk[2] contient le nom de ton fichier
 
[edit: le i est inutile pour le preg dans ce cas la]


Message édité par anapajari le 19-04-2004 à 16:03:00
Reply

Marsh Posté le 19-04-2004 à 16:09:19    

Tu peux m'expliker un peu parce ke la je suis à la masse :/
 
en tout cas merci bcp


---------------
:D
Reply

Marsh Posté le 19-04-2004 à 16:35:39    

en gros ça fait:

Code :
  1. (.*?)  n'importe quoi 0 ou plus de fois jusqu'a
  2. \/     un slash suivi
  3. (      d'un motif composé de
  4. ([^\/]*)   un motif composé de n'importe quel caractère sauf slash 0 ou plus de fois suivi
  5.   \.        d'un point suivi
  6.   ([^\/]*)  un motif composé de n'importe quel caractère sauf slash 0 ou plus de fois suivi
  7. )   fin du motif


au niveau des ([^\/]*) les parenthèses ne sont pas indispensables mais te permettent de récuperer le nom de ton fichier $chunk[3] et son extension $chunk[4].
 
Attention, si tu peux avoir plusieurs points dans ton nom de fichier ( fichier.txt.old ) ça va merdouiller a ce niveau ...

Reply

Marsh Posté le 19-04-2004 à 16:44:48    

Merci
 
T'aurais pas un site ou kkchose dans ce genre à me conseiller ?


---------------
:D
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed