2009-04-11 21 views
31

Obecnie próbuję podzielić ciąg znaków w C# (najnowsze .NET i Visual Studio 2008), aby pobrać wszystko, co jest w nawiasach kwadratowych i odrzucić pozostały tekst.C# Regex Split - wszystko wewnątrz nawiasów kwadratowych

Np "antagonista [HSA: 3269] H1-receptor [ścieżka: hsa04080 (3269)]"

W tym przypadku, jestem zainteresowany w uzyskaniu "HSA: 3269" i " ŚCIEŻKA: hsa04080 (3269) "na tablicę łańcuchów.

Jak można to osiągnąć?

Odpowiedz

60

Split nie pomoże ci tutaj; musisz użyć wyrażeń regularnych:

// 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]); 
} 

Daje wyniki.

+3

Czy uważasz, że to niezręczne w wersji 3.5, że enumeartor MatchCollection nadal zwraca Match as Object? – chakrit

+3

mimo wszystko ... lepszym dopasowaniem do wyrażenia regularnego może być \ [([^ \]] *) \], aby być po bezpiecznej stronie :-) – chakrit

+0

@chakrit: 1. Tak, ale nie można tego zmienić w celu zapewnienia kompatybilności wstecznej powody. Naprawdę szkoda. Microsoft powinien mieć kulki do robienia jak Python 3: wyrzucić wszystko na pre-2.0 na dobre i wprowadzić przełomową zmianę. Ale tak się nie stanie ... –

0

Spróbuj

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] + "}", ""); 
}; 

ten sposób Mam tablicę, która będzie zawierać Robert i Floryda.

+2

Ten kod zakłada, że ​​nawiasy są zawsze idealnie dopasowane (nigdy nie masz '}' przed '{' i nigdy nie masz '{' dwa razy z rzędu.Jest to również bardzo mało wydajne, ponieważ dzieli łańcuch wiele razy niepotrzebnie. Byłoby znacznie bardziej wydajne i niezawodne w użyciu Regex, tak jak robi to inna odpowiedź. –

Powiązane problemy