Supprimer tous les commentaires (simple / multi-ligne) & amp; lignes vides du fichier source
Comment puis-je supprimer tous les commentaires et les lignes vierges à partir d'un source C# fichier. Avoir à l'esprit qu'il pourrait y avoir des commentaires imbriqués. Quelques exemples:
string text = @"//not a comment"; //a comment
/* multiline
comment */ string newText = "/*not a comment*/"; //a comment
/* multiline //not a comment
/* comment */ string anotherText = "/* not a comment *///some text here\"//not a comment"; //a comment
Nous pouvons avoir beaucoup plus complexe que ces trois exemples ci-dessus.
Certains ont un, suggère une expression régulière pattern ou de l'autre façon de résoudre ce problème. J'ai déjà parcouru beaucoup de choses sur internet et coudn'pas trouver quelque chose qui fonctionne.
source d'informationauteur nenito
Vous devez vous connecter pour publier un commentaire.
Pour supprimer les commentaires, voir cette réponse.
Après cela, la suppression des lignes vides est trivial.
Vous pouvez utiliser la fonction dans cette réponse:
Et puis supprimer les lignes vides.
Malheureusement, cela est vraiment difficile à faire de manière fiable avec la regex sans qu'il y ait des cas limites. Je havnt une enquête très loin, mais vous pourriez être en mesure d'utiliser le Visual Studio Services Linguistiques pour analyser les commentaires.
Si vous souhaitez identifier des commentaires avec les regexes, vous avez vraiment besoin d'utiliser les regex comme un générateur de jetons. I. e., il identifie et extrait la première chose dans la chaîne, si cette chose est un littéral de chaîne, un commentaire, ou un bloc de choses qui n'est ni un littéral de chaîne, ni observation. Ensuite, vous prenez le reste de la chaîne et tirez la prochaine ôta le début.
Cela vous permet d'éviter les problèmes avec le contexte. Si vous êtes juste essayer de chercher des choses dans le milieu de la chaîne, il n'y a pas de bonne façon de déterminer si une "commentaire" est à l'intérieur d'une chaîne de caractères littérale ou non-en fait, il est difficile de déterminer où sont les littéraux de chaîne sont, en premier lieu, à cause de choses comme
\"
. Mais si vous prenez toujours la première chose dans la chaîne, il est facile de dire "oh, la chaîne commence avec"
donc tout à la prochaine sans échappement"
est plus de corde." Contexte prend soin de lui-même.Si vous voulez trois regexes:
//
ou un/*
commentaire)."
et@"
chaînes, chacun à son bord des cas.L'écriture du modèles regex est laissé comme exercice pour le lecteur, car il faudrait des heures pour écrire et tester tout ça et je ne suis pas prêt à le faire gratuitement. (sourire) Mais c'est certainement faisable, si vous avez une bonne compréhension de regexes (ou d'avoir un endroit comme StackOverflow de poser des questions lorsque vous êtes coincé) et sont prêts à écrire un tas de tests automatisés pour votre code. Attention sur ce dernier ("autre chose"), mais-si vous voulez arrêter juste avant un
@
si elle est suivie par un"
mais pas si c'est une@
pour échapper à un mot-clé à utiliser comme identificateur.Voir aussi mon projet de code C# minification: CSharp-Minifier
Côté de suppression de commentaires, les espaces et les sauts de ligne de code, à l'heure actuelle, il est capable de compresser des locaux, les noms de variables et de faire une autre minifications.
Tout d'abord, vous aurez envie d'utiliser le
RegexOptions.SingleLine
lors de la construction de votreRegEx
instance. Maintenant, vous êtes de traitement unique de lignes de code.Pour compléter l'aide de la
RegexOptions.SingleLine
option, vous voudrez vous assurer que vous utilisez la de début et de fin de chaîne ancres (^
et$
respectivement), comme pour les cas spécifiques que vous avez, vous voulez l'expression régulière à appliquer à la ensemble chaîne.Je recommande aussi de casser les conditions et l'utilisation de l'alternance pour traiter de petites les cas, la construction d'une plus grande expression régulière à partir de la plus petite, plus facile à gérer expressions.
Enfin, je sais que c'est les devoirs, mais de l'analyse d'un logiciel de langue avec des expressions régulières est un exercice de futilité (ce n'est pas une application pratique). C'est mieux pour des données structurées. Si vous vous trouvez dans le futur, vous voulez faire des choses comme cela, utiliser un parser qui est construit pour la langue, (dans ce cas, je serais très recommander Roslyn).
Utiliser mon projet de supprimer la plupart des commentaires. https://github.com/SynAppsDevelopment/CommentRemover
Il supprime tout plein de ligne, fin de ligne, et XML Doc commentaires de code avec certaines limitations pour des complexes de commentaires expliqué dans le readme et de la source. C'est une solution C# avec un WinForms interface.