Expression régulière pour code moche
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:
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:
1 2 3 4 5
|
// Avant
FonctionAvant (PARA1 , PARA2 , PARA3 ) ;
// Après
FonctionApres(PARA1, PARA2, PARA3); |
Mais si le code est
Code:
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:
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