Muszę przeanalizować ciąg i dodać pojedyncze cudzysłowy wokół każdej wartości Guid. Myślałem, że mógłbym użyć do tego Regexa, ale nie jestem dokładnie guru Regex.
Czy istnieje dobry Regex do identyfikacji Guid?
Moje drugie pytanie dotyczy znalezienia prawidłowego wyrażenia regularnego, którego, jak przypuszczam, użyłbym, Regex.Replace(String, String, MatchEvaluator)
ale nie jestem do końca pewien składni. Może coś takiego:
return Regex.Replace(stringToFindMatch, GuidRegex, match =>
{
return string.Format("'{0}'", match.Groups[0].ToString());
});
Ciąg, który próbuję przeanalizować, może wyglądać następująco:
„WYBIERZ hasłoco0_.PASSWORD_CONFIG_ID as PASSWORD1_46_0_, FROM PASSWORD_CONFIG passwordco0_ WHERE passwordco0_.PASSWORD_CONFIG_ID = baf04077-a3c0-454b-ac6f-9fec00b8e170; @ p045-b1b-a-070-c045-a (040-b) Type-C045-a-a-070-a)
Odpowiedzi:
Ten jest dość prosty i, jak mówisz, nie wymaga delegata.
Jest to zgodne z następującymi stylami, które są równoważnymi i akceptowalnymi formatami identyfikatora GUID.
Zaktualizuj 1
@NonStatic zwraca uwagę w komentarzach, że powyższe wyrażenie regularne będzie pasowało do fałszywych alarmów, które mają nieprawidłowy ogranicznik zamykający.
Można tego uniknąć, stosując powszechnie obsługiwane wyrażenia warunkowe wyrażeń regularnych.
Warunki warunkowe są obsługiwane przez silnik JGsoft, Perl, PCRE, Python i platformę .NET. Ruby obsługuje je od wersji 2.0. Języki, takie jak Delphi, PHP i R, które mają funkcje regex oparte na PCRE, również obsługują warunkowe. (źródło http://www.regular-expressions.info/conditional.html )
Wyrażenie regularne występujące po nim będzie pasować
I nie będzie pasować
Regex:
Rozwiązania są uproszczone, aby dopasować tylko liczby, aby w bardziej przejrzysty sposób pokazać, co jest wymagane w razie potrzeby.
źródło
[0-9a-fA-F\-]{32,36}
.https://support.office.com/en-us/article/poisson-function-d81f7294-9d7c-4f75-bc23-80aa8624173a
Najbardziej podstawowe wyrażenie regularne jest następujące:
lub możesz go wkleić tutaj .
Mam nadzieję, że zaoszczędzi ci to trochę czasu.
źródło
[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}
Kreski mogą być wykonane opcjonalnie:[0-9A-Fa-f]{8}-?([0-9A-Fa-f]{4}-?){3}[0-9A-Fa-f]{12}
.Aby C # .Net mógł znaleźć i zamienić dowolny ciąg szukający guid z podanego tekstu,
Użyj tego wyrażenia regularnego:
Przykładowy kod C #:
Na pewno działa! Dopasowuje i zastępuje następujące style, które są równoważnymi i akceptowalnymi formatami identyfikatora GUID.
źródło
W .NET Framework 4 jest ulepszona struktura System.Guid, która obejmuje nowe metody TryParse i TryParseExact do analizowania GUID. Oto przykład.
W tym przykładzie tworzymy nowy obiekt guid, a także pobieramy jedną zmienną łańcuchową, która ma nieprawidłowy identyfikator guid. Następnie używamy metody TryParse, aby sprawdzić, czy obie zmienne mają prawidłowy format guid, czy nie. Uruchamiając przykład możesz zobaczyć, że zmienna łańcuchowa nie ma prawidłowego formatu guid i wyświetla komunikat „InValid guid”. Jeśli zmienna łańcuchowa ma prawidłowy identyfikator GUID, to zwróci wartość true w metodzie TryParse.
źródło
Możesz łatwo automatycznie wygenerować kod C # za pomocą: http://regexhero.net/tester/ .
Jest wolne.
Oto jak to zrobiłem:
Witryna następnie automatycznie generuje kod .NET:
źródło
Używam łatwiejszego wzorca wyrażenia regularnego
źródło