2009-11-20 4 views
3

J'ai une zone de texte dans laquelle l'utilisateur peut éditer du texte, dans un langage de script. J'ai compris comment laisser l'utilisateur commenter les lignes en un clic, mais n'arrive pas à comprendre comment le décommenter correctement. Par exemple, si la case a:Supprimer le texte spécifié du début des lignes uniquement si présent (C#)

Normal Text is here 
More normal text 
-- Commented text 
-- More commented text 
Normal Text again 
--Commented Text Again 

Ainsi, lorsque l'utilisateur sélectionne une quantité de texte et décide de décommenter, le « - » est retiré du début des lignes qui l'ont . Les lignes sans le "-" ne devraient pas être affectées. En bref, je veux une fonction de décommentation similaire à celle de Visual Studio. Y a-t-il un moyen d'accomplir cela?

Merci

+1

Cela semble être une tâche assez simple. Qu'avez-vous essayé? Une recherche regex pour le "-", ou juste une promenade à travers les lignes à la recherche de line.StartsWith ("-") semble être le ticket. –

Répondre

-4

Il méthode la plus simple serait de faire ce qui suit pour tout le bloc de texte à la fois:

string uncommentedText = yourText.Trim().Replace("-- ", ""); 

Vous pouvez également diviser le texte dans un tableau de lignes de texte et procédez comme suit ligne par ligne avec pour assurer un "-- " quelque part au milieu ne serait pas supprimé:

string uncommentedLine = yourLine.Trim().StartsWith("-- ") ? 
    yourLine.Trim().Replace("-- ", "") : yourLine; 
+8

Le code présenté a 2 inconvénients: 1. le code supprime les occurrences de "-" partout dans la chaîne 'yourText', et pas seulement au début; 2. le code ne gère pas la situation lorsqu'il n'y a pas d'espace entre les tirets et le texte, comme dans la dernière ligne de l'échantillon. – artdanil

3

Qu'en est-il en utilisant 'TrimStart (...)'?

string line = "-- Comment"; 
line = line.TrimStart('-', ' '); 
+3

Mais cela ne supprime qu'un seul caractère. –

+0

Cela supprimera toute combinaison de '-' et '', et pas seulement "-". – Gh0sT

10

Utilisez System.Text.RegularExpressions.Regex.Replace pour une solution simple et robuste:

Regex.Replace(str, @"^--\s*", String.Empty, RegexOptions.Multiline) 

Et voici une preuve de travail dans un C# Session interactive:

Microsoft (R) Visual C# Interactive Compiler version 1.2.0.60317 
Copyright (C) Microsoft Corporation. All rights reserved. 

Type "#help" for more information. 
> using System.Text.RegularExpressions; 
> var str = @"Normal Text is here 
. More normal text 
. -- Commented text 
. -- More commented text 
. Normal Text again 
. --Commented Text Again"; 
> str = Regex.Replace(str, @"^--\s*", string.Empty, RegexOptions.Multiline); 
> Console.WriteLine(str); 
Normal Text is here 
More normal text 
Commented text 
More commented text 
Normal Text again 
Commented Text Again 
Questions connexes