Jak utworzyć grupy o nazwach w języku C# za pomocą wyrażeń regularnych i czy jest to dobra praktyka?Wyrażenia regularne z nazwanymi grupami: dobre lub złe?
Z góry dziękuję.
Jak utworzyć grupy o nazwach w języku C# za pomocą wyrażeń regularnych i czy jest to dobra praktyka?Wyrażenia regularne z nazwanymi grupami: dobre lub złe?
Z góry dziękuję.
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.
nazwanych grup przechwytywania są ładne, zazwyczaj tho z prostsze regex Korzystanie z liczbową grupę przechwytywania jest prawdopodobnie bardziej streamliney, kilka porad tutaj:
Dziękuję bardzo za odpowiedź i za link. – Payne
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. .
Alternatywną składnią jest '(? 'TagName'. *)'. –
Wielkie dzięki za odpowiedź. Nie wiem, dlaczego myślałem, że będzie źle. – Payne