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.
Cela marche bien lorsque le code est, par exemple :
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);");
Mais si le code est
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);
Cela ne fonctionne pas, car il y a des espaces qui existent autrement qu'après / avant les virgules.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // Avant FonctionAvant (PARA1 , PARA2 | Truc , PARA3 ) ;
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.
Avez-vous une idée ?
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 );
Merci
Partager