Expression régulière

Expression régulière - Divers - Programmation

Marsh Posté le 09-09-2010 à 09:52:44    

Bonjour,
 
Je galère avec une expression régulière pour faire des remplacements dans du texte (avec notepad++).
 
Cela ne doit pas être compliqué mais je sèche malgré les tutos.
 
J'ai une expression de cette forme.
9018016;121.81;243.62;00002114
 
Elle doit devenir :
("9018016",121.81,243.62,00002114)
 
Je sèche pour insérer une chaine de caractère avant mon expression :
J'ai testé ça : ^(.) mais cela me sélectionne mon 1er caractère mais je veux le garder et ne pas le remplacer.
 
Même soucis pour la fin de ma ligne avec cette expression : (.)$
 
Je sèche également pour faire une différenciation entre mon 1er ";" et les autres.
 
Merci pour votre aide
 
 

Reply

Marsh Posté le 09-09-2010 à 09:52:44   

Reply

Marsh Posté le 09-09-2010 à 11:16:06    

Ma technique n'est pas une expression régulière, mais au moins elle fonctionne :  
awk 'BEGIN { FS = ";" } ; { print "(\""$1"\","$2","$3","$4" )" }'
 
Sinon avec Sed mais elle moins propre
sed -e 's/^/("/g;s/;/",/;s/;/,/g;s/$/)/g'
 
Je doute qu'avec une Regex on puisse le faire d'ailleurs !


Message édité par roondar le 09-09-2010 à 11:21:10
Reply

Marsh Posté le 09-09-2010 à 11:21:03    

echo "9018016;121.81;243.62;00002114" | sed -e 's/^\([^;]*\)\(;.*\)$/("\1"\2)/' -e 's/;/,/'


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 09-09-2010 à 12:01:16    

Avec l'exemple de "Un Programmeur", j'ai trouvé l'astuce, cela fonctionne avec Scite mais ca devrait fonctionner aussi avec notepad++.
Recherche : ^\(.*\);\(.*\);\(.*\);\(.*\)
Remplacer par : ("\1",\2,\3,\4)
Mode de recherche: Expression régulière


Message édité par roondar le 09-09-2010 à 12:06:18
Reply

Marsh Posté le 09-09-2010 à 12:11:32    

merci .. c'est compliqué tout ça ^^
 
Sinon sur un autre forum, on m'avait donné ça :
Recherche: ^(\d+)(.*)$
Remplacer: ("\1"\2)
 
Ca fait tout ce que j'ai à faire .. sauf pour changer mes points virgules en virgule.
Dans ce cas la, je peux le faire en une 2ème passe (parce que j'y connais pas grand chose et que je comprends pas la 1ere expression).
 
@roondar : j'ai testé ta 2eme solution .. cela n'a pas l'air de fonctionner avec notepad;  
 
 

Reply

Marsh Posté le 09-09-2010 à 12:20:10    

Dans ce cas là remplace
^(\d+)(.*)$ par ^(.*);(.*);(.*);(.*)$
et ("\1"\2) par ("\1",\2,\3,\4)
 
Ça doit juste être un problème d'échappement des parenthèses.


Message édité par roondar le 09-09-2010 à 12:22:48
Reply

Marsh Posté le 09-09-2010 à 13:27:12    

ça marche.
 
Merci beaucoup ^^

Reply

Marsh Posté le 09-09-2010 à 13:39:14    

Si tu veux un peu mieux comprendre va dans la partie 7 de cette page http://astuces.jeanviet.info/burea [...] egex.htm#7

Reply

Marsh Posté le 09-09-2010 à 16:33:49    

ah merci.. C'est déjà plus clair.
 
je comprenais pas les \1 \2 ...

Reply

Sujets relatifs:

Leave a Replay

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