Potrzebuję wyrażenia regularnego, które znajdzie dopasowania tylko wtedy, gdy cały ciąg pasuje do mojego zapytania.
Na przykład, jeśli wyszukuję filmy z tytułem „Czerwony październik”, chcę dopasować tylko do tego dokładnego tytułu (bez rozróżniania wielkości liter), ale nie chcę dopasować tytułów takich jak „Polowanie na czerwony październik”. Nie jestem pewien, czy wiem, jak to zrobić. Ktoś wie?
Dzięki!
string.Contains
będzie działać proste ?string1.Equals(string2, StringComparison.OrdinalIgnoreCase);
Odpowiedzi:
Wypróbuj następujące wyrażenie regularne:
Domyślnie w wyrażeniach regularnych rozróżniana jest wielkość liter. Znak
^
oznacza początek pasującego tekstu i$
koniec.źródło
$
nie zawsze pasuje do końca łańcucha,\z
tak (\Z
jest odpowiednikiem w Pythonie). Zobacz odpowiedź Tima Pietzckera . Dotyczy to jednak JavaScript.Ogólnie rzecz biorąc, z domyślnymi ustawieniami
^
i$
kotwicami to dobry sposób na upewnienie się, że wyrażenie regularne pasuje do całego ciągu.Jednak kilka zastrzeżeń:
Jeśli masz zmianę w swoim wyrażeniu regularnym, pamiętaj, aby umieścić swoje wyrażenie regularne w grupie nieprzechwytywanej przed otoczeniem go za pomocą
^
i$
:oczywiście różni się od
Ponadto
^
i$
może mieć inne znaczenie (początek / koniec wiersza zamiast początku / końca łańcucha ), jeśli określone opcje są ustawione. W edytorach tekstu obsługujących wyrażenia regularne jest to zwykle zachowanie domyślne. W niektórych językach, szczególnie w Rubim, tego zachowania nie można nawet wyłączyć.Dlatego istnieje inny zestaw kotwic, które na pewno będą pasować tylko na początku / końcu całego ciągu:
\A
dopasowuje na początku ciągu.\Z
dopasowania na końcu łańcucha lub przed końcowym podziałem wiersza.\z
pasuje na samym końcu ciągu.Ale nie wszystkie języki obsługują te kotwice, w szczególności JavaScript.
źródło
Użyj modyfikatorów
^
i,$
aby określić, gdzie znajduje się wzorzec wyrażenia regularnego względem początku i końca ciągu:Regex.Match("Red October", "^Red October$"); // pass Regex.Match("The Hunt for Red October", "^Red October$"); // fail
źródło
Wiem, że może być trochę za późno na odpowiedź, ale może przyda się komuś innemu.
Najprostszy sposób:
var someString = "..."; var someRegex = "..."; var match = Regex.Match(someString , someRegex ); if(match.Success && match.Value.Length == someString.Length){ //pass } else { //fail }
źródło
Musisz umieścić swoje wyrażenie regularne w
^
(początek ciągu) i$
(koniec ciągu):źródło
Przepraszam, ale to trochę niejasne.
Z tego, co przeczytałem, chcesz zrobić proste porównanie ciągów. Nie potrzebujesz do tego wyrażenia regularnego.
string myTest = "Red October"; bool isMatch = (myTest.ToLower() == "Red October".ToLower()); Console.WriteLine(isMatch); isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());
źródło
Możesz to zrobić w ten sposób, jeśli chcę tylko raz złapać literę minus a w ciągu i można to sprawdzić za pomocą myRegex.IsMatch ()
^ [^ e] [e] {1} [^ e] $
źródło