Bonjour,

Je récupère un code avec des espaces de partout, des indentations pourries, ...
D'autre part, je dois modifier le nom de certaines fonctions, car les fonctions appelées doivent changer (modification de la bibliothèque utilisée).
J'ai donc fait une "jolie" expression régulière, qui supprime les espaces en trop pour une fonction particulière ayant 3 arguments.
Malheureusement, cela ne va pas aussi loin que je le voudrais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Regex MyRegex = new Regex(@"\s*([/]*)\s*FonctionAvant\s*\(\s*(.*)\s*,\s*(.*)\s*,\s*(.*)\s*\)\s*;\s*");
NewLine = MyRegex.Replace(Line,"$1FonctionApres($2, $3, $4);");
Cela marche bien lorsque le code est, par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
// Avant
FonctionAvant  (PARA1       , PARA2        , PARA3     )   ;
// Après
FonctionApres(PARA1, PARA2, PARA3);
Mais si le code est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
// Avant
FonctionAvant  (PARA1       , PARA2 | Truc        , PARA3     )  ;
Cela ne fonctionne pas, car il y a des espaces qui existent autrement qu'après / avant les virgules.

J'utilise vi, et remplacer le \s*(\S*)\s* par \s*(.*)\s* fonctionne très bien, pour résoudre le problème.
C#, pour le moment, considère le .* comme prioritaire sur \s, et ne supprime donc pas les espaces.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Regex MyRegex = new Regex(@"\s*([/]*)\s*FonctionAvant\s*\(\s*(\S*)\s*,\s*(\S*)\s*,\s*(\S*)\s*\)\s*;\s*");
NewLine = MyRegex.Replace(Line,"$1FonctionApres($2, $3, $4);");
 
// Avant
FonctionAvant  (PARA1       , PARA2 | Truc        , PARA3     )   ;
// Après
FonctionApres  (PARA1       , PARA2 | Truc        , PARA3     );
Avez-vous une idée ?

Merci