2009-10-16 10 views
13

Come posso ottenere solo la prima riga di testo multilinea utilizzando le espressioni regolari?Come prendere solo la prima riga dal testo multilinea

 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); 

risposta

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); 

. è spesso propagandato per adattarsi a qualsiasi personaggio, mentre questo non è del tutto vero. . corrisponde a qualsiasi carattere solo se si utilizza l'opzione RegexOptions.Singleline. Senza questa opzione, corrisponde a qualsiasi carattere ad eccezione di '\n' (fine riga).

Detto questo, una soluzione migliore è probabile che sia:

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]; 

E meglio ancora, è la versione di Brian Rasmussen:

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

E non funziona, hai provato a eseguire il codice? – Restuta

+0

Sì, in LINQPad. Cosa c'è che non va? –

+1

La tua soluzione alternativa fa un sacco di lavoro che non è veramente necessario. Se il test è breve come nell'esempio, probabilmente non sarà un problema, ma per una grande stringa multi-linea è un po 'di spreco. –

1

provare questo:

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

Se hai solo bisogno della prima linea, puoi farlo con utilizzando un'espressione regolare come questo

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

Per quanto mi piace regexs, non realmente bisogno di loro per tutto, quindi a meno che questo fa parte di qualche grande esercizio regex, vorrei andare per la soluzione più semplice in questo Astuccio.

+0

Si prega di commentare quando si scende di voto. –

+0

(Disclaimer: io sono la persona che ti ha upvoted) Ma probabilmente è perché non è un'espressione regolare. –

+5

Questa è la soluzione migliore. Nessuna regex è necessaria per un compito così semplice, e anche questo è efficiente. – Noldorin

1

I miei 2 centesimi:

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

Problemi correlati