2010-01-22 8 views

Odpowiedz

7

Nadaj grupie nazwę tagu:

(?<TagName>.*) 

I absolutnie, że to jest dobra praktyka. Zastanów się, co się stanie, gdy zmienisz wyrażenie regularne. Jeśli używasz indeksów do wyciągania danych, kolejność tych grup może się zmienić. Nadając im nazwę, określasz dokładnie te dane, które uważasz, że grupa zawiera, więc jest to również forma samokomponowania.

+2

Alternatywną składnią jest '(? 'TagName'. *)'. –

+0

Wielkie dzięki za odpowiedź. Nie wiem, dlaczego myślałem, że będzie źle. – Payne

2

Jak inni zwrócili uwagę składnia jest (?<GroupName>....).

Oto przykład pokazujący, jak utworzyć grupę o nazwie Key i grupa o nazwie Value, a równie ważne (ale często zapomniane) - jak wyodrębnić grupy według nazwy z powstałego obiektu mecz:

string s = "foo=bar/baz=qux"; 
Regex regex = new Regex(@"(?<Key>\w+)=(?<Value>\w+)"); 
foreach (Match match in regex.Matches(s)) 
{ 
    Console.WriteLine("Key = {0}, Value = {1}", 
     match.Groups["Key"].Value, 
     match.Groups["Value"].Value); 
} 

Normalnie nie użyłbym nazwanych grup do bardzo prostych wyrażeń, na przykład, jeśli istnieje tylko jedna grupa.

Dla bardziej złożonych wyrażeń regularnych z wieloma grupami zawierającymi złożone wyrażenia, dobrym pomysłem byłoby użycie nazwanych grup. Z drugiej strony, jeśli twoje wyrażenie regularne jest tak skomplikowane, że musisz to zrobić, to może być dobrym pomysłem, aby sprawdzić, czy możesz rozwiązać problem w inny sposób, lub podzielić algorytm na mniejsze, prostsze kroki. .

Powiązane problemy