2009-04-11 12 views
31

Attualmente sto provando a dividere una stringa in C# (ultime .NET e Visual Studio 2008), per recuperare tutto ciò che è racchiuso tra parentesi quadre e scartare il testo rimanente.C# Regex Split - tutto all'interno di parentesi quadre

esempio: "antagonista del recettore H1 [HSA: 3269] [PATH: hsa04080 (3269)]"

In questo caso, io sono interessato a ottenere "HSA: 3269" e " PERCORSO: hsa04080 (3269) "in una matrice di stringhe.

Come può essere ottenuto?

risposta

60

Split non ti aiuterà qui; è necessario utilizzare le espressioni regolari:

// using System.Text.RegularExpressions; 
// pattern = any number of arbitrary characters between square brackets. 
var pattern = @"\[(.*?)\]"; 
var query = "H1-receptor antagonist [HSA:3269] [PATH:hsa04080(3269)]"; 
var matches = Regex.Matches(query, pattern); 

foreach (Match m in matches) { 
    Console.WriteLine(m.Groups[1]); 
} 

Produce i risultati.

+3

Trovi strano in 3.5 che l'enumeratore MatchCollection restituisca ancora Match as Object? – chakrit

+3

comunque ... una migliore corrispondenza regolare potrebbe essere \ [([^ \]] *) \] così da essere al sicuro :-) – chakrit

+0

@chakrit: 1. Sì, ma questo non può essere modificato per la compatibilità all'indietro motivi. Davvero un vero peccato. Microsoft dovrebbe avere le palle per fare come Python 3: lanciare tutto pre-2.0 per sempre e introdurre una svolta. Ma questo non succederà ... –

0

Prova questa

string mystr = "Hello my name is {robert} and i live in {florida}"; 

List<string> myvariables = new List<string>(); 
while (mystr.Contains("{")) 
{ 
    myvariable.Add(mystr.Split('{', '}')[1]); 
    mystr = mystr.Replace("{" + mystr.Split('{', '}')[1] + "}", ""); 
}; 

In questo modo avrò una matrice che conterrà robert e Florida.

+2

Questo codice presuppone che le parentesi siano sempre perfettamente abbinate (non si ha mai '}' prima di '{', e non si ha mai '{' due volte di fila. È anche molto inefficiente perché divide la stringa molte volte inutilmente. sarebbe molto più efficiente e robusto usare Regex come fa l'altra risposta. –

Problemi correlati