2011-02-03 11 views
10

Próbuję wyodrębnić wartości z ciągu znaków, które są między < < i >>. Ale mogą się zdarzyć wiele razy.RegEx Dopasuj wiele razy w ciągu znaków

Czy ktoś może pomóc w wyrażeniu regularnym, aby je dopasować;

this is a test for <<bob>> who like <<books>> 
test 2 <<frank>> likes nothing 
test 3 <<what>> <<on>> <<earth>> <<this>> <<is>> <<too>> <<much>>. 

Następnie chcę wyłączyć GroupCollection, aby uzyskać wszystkie wartości.

Każda pomoc bardzo otrzymana. Dzięki.

Odpowiedz

28

Użyj pozytywne spojrzenie w przyszłość i szukać za twierdzeniem dopasować kątowniki, użyj .*? dopasować najkrótsza możliwa sekwencja znaków między tymi nawiasami. Znajdź wszystkie wartości, powtarzając MatchCollection zwracaną przez metodę Matches().

Regex regex = new Regex("(?<=<<).*?(?=>>)"); 

foreach (Match match in regex.Matches(
    "this is a test for <<bob>> who like <<books>>")) 
{ 
    Console.WriteLine(match.Value); 
} 
+0

Żadna gra słów nie jest przeznaczona, ale to jest to, o co prosiłem. Dziękuję za bardzo szybkie odpowiedzi. –

1

Można spróbować jednego z nich:

(?<=<<)[^>]+(?=>>) 
(?<=<<)\w+(?=>>) 

Jednak trzeba będzie iteracyjne wracającą MatchCollection.

Powiązane problemy