Мне нужно регулярное выражение, которое будет находить только совпадения, в которых вся строка соответствует моему запросу.
Например, если я выполняю поиск фильмов с названием «Красный октябрь», я хочу найти совпадение только по этому точному названию (без учета регистра), но не совпадать с такими названиями, как «Охота за красным октябрем». Не совсем уверен, что знаю, как это сделать. Кто-нибудь знает?
Благодаря!
string.Contains
будет работать простое ?string1.Equals(string2, StringComparison.OrdinalIgnoreCase);
Ответы:
Попробуйте следующее регулярное выражение:
По умолчанию регулярные выражения чувствительны к регистру. Знак
^
отмечает начало и$
конец совпадающего текста .источник
$
не всегда соответствует концу строки, соответствует\z
(\Z
эквивалент в Python). См . Ответ Тима Пицкера . Однако это верно для JavaScript.Как правило, и с настройками по умолчанию,
^
и$
якоря - хороший способ убедиться, что регулярное выражение соответствует всей строке.Однако есть несколько предостережений:
Если у вас есть чередование в вашем регулярном выражении, обязательно заключите ваше регулярное выражение в группу без захвата, прежде чем окружать его
^
и$
:конечно отличается от
Кроме того,
^
и$
может иметь другое значение (начало / конец строки вместо начала / конца строки ), если установлены определенные параметры. В текстовых редакторах, поддерживающих регулярные выражения, это обычно поведение по умолчанию. В некоторых языках, особенно Ruby, это поведение даже нельзя отключить.Следовательно, есть еще один набор якорей, которые гарантированно будут соответствовать только в начале / конце всей строки:
\A
совпадает с началом строки.\Z
совпадает в конце строки или перед окончательным разрывом строки.\z
соответствует в самом конце строки.Но не все языки поддерживают эти привязки, особенно JavaScript.
источник
Используйте
^
и$
модификаторы для обозначения , где регулярное выражение шаблон сидит относительно начала и конца строки:Regex.Match("Red October", "^Red October$"); // pass Regex.Match("The Hunt for Red October", "^Red October$"); // fail
источник
Я знаю, что, может быть, ответить на этот вопрос немного поздно, но, может быть, это пригодится кому-то другому.
Самый простой способ:
var someString = "..."; var someRegex = "..."; var match = Regex.Match(someString , someRegex ); if(match.Success && match.Value.Length == someString.Length){ //pass } else { //fail }
источник
Вам нужно заключить свое регулярное выражение в
^
(начало строки) и$
(конец строки):источник
Извините, но это немного непонятно.
Из того, что я читал, вы хотите провести простое сравнение строк. Для этого вам не нужно регулярное выражение.
string myTest = "Red October"; bool isMatch = (myTest.ToLower() == "Red October".ToLower()); Console.WriteLine(isMatch); isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());
источник
Вы можете сделать это, как этот пример, если я хочу только один раз поймать букву минус a в строке, и это можно проверить с помощью myRegex.IsMatch ()
^ [^ e] [e] {1} [^ e] $
источник