2009-10-16 6 views
13

Comment obtenir uniquement la première ligne de texte multiligne en utilisant des expressions régulières?Comment ne prendre que la première ligne du texte multiligne

 string test = @"just take this first line 
     even there is 
     some more 
     lines here"; 

     Match m = Regex.Match(test, "^", RegexOptions.Multiline); 
     if (m.Success) 
      Console.Write(m.Groups[0].Value); 

Répondre

11
string test = @"just take this first line 
even there is 
some more 
lines here"; 

Match m = Regex.Match(test, "^(.*)", RegexOptions.Multiline); 
if (m.Success) 
    Console.Write(m.Groups[0].Value); 

. est souvent présentée pour correspondre à tout caractère, alors que ce n'est pas tout à fait vrai. . correspond à n'importe quel caractère uniquement si vous utilisez l'option RegexOptions.Singleline. Sans cette option, il correspond à n'importe quel caractère sauf '\n' (fin de ligne).

Cela dit, une meilleure option est susceptible d'être:

string test = @"just take this first line 
even there is 
some more 
lines here"; 

string firstLine = test.Split(new string[] {Environment.NewLine}, StringSplitOptions.None)[0]; 

Et mieux encore, est la version de Brian Rasmussen:

string firstline = test.Substring(0, test.IndexOf(Environment.NewLine)); 
+0

Il ne fonctionne pas, vous avez essayé d'exécuter votre code? – Restuta

+0

Oui, dans LINQPad. Quel est le problème de votre côté? –

+1

Votre solution de rechange fait beaucoup de travail qui n'est pas vraiment nécessaire. Si le test est court, comme dans l'exemple, cela ne posera probablement pas de problème, mais pour une grande chaîne multi-ligne, c'est un peu gâché. –

1

Essayez celui-ci:

Match m = Regex.Match(test, @".*\n", RegexOptions.Multiline); 
38

Si vous avez juste besoin de la première ligne, vous pouvez le faire avec à l'aide d'une expression régulière comme celui-ci

var firstline = test.Substring(0, test.IndexOf(Environment.NewLine)); 

Autant que j'aime regexs, vous n'avez pas vraiment besoin d'eux pour tout, donc à moins que cela fait partie de peu d'exercice regex plus, je pencherais pour la solution plus simple dans ce Cas.

+0

S'il vous plaît commenter lors du vote. –

+0

(Disclaimer: Je suis la personne qui vous a upvoted) Mais c'est probablement parce que ce n'est pas une regex. –

+5

C'est la meilleure solution. Aucune regex nécessaire pour une tâche aussi simple, et c'est aussi efficace. – Noldorin

1

Mes 2 cents:

[^ \ n] * (\ n | $)

Questions connexes