2009-07-03 2 views
1

Это лучший способ сделать это с помощью Regex? Я не хочу, чтобы он собирал частичные слова, например, если я ищу Гав, это не должно совпадать с Гэвином.C# Проверить слово существует в строке

Любые примеры были бы замечательными, так как мои навыки регулярного выражения не существуют.

Благодаря

ответ

16

Да, Regex идеально подходит для работы.

Что-то вроде:

string regexPattern = string.Format(@"\b{0}\b", Regex.Escape(yourWord)); 
if (Regex.IsMatch(yourString, regexPattern)) { 
    // word found 
} 
+2

+1 для Regex.Escape() – RichieHindle

+4

Можно добавить RegexOptions.IgnoreCase тоже, в зависимости от того, хочет ли OP, чтобы совпадение было чувствительным к регистру. – LukeH

3

То, что вы хотите, вероятно, так:

if (Regex.IsMatch(myString, @"\bGav\b")) { ... } 

\ Ъ: s в регулярных выражениях указывают границы слов, т.е. пробел или начало/конец строка. Вы также можете добавить в RegexOptions.IgnoreCase третий параметр, если хотите. Обратите внимание, что @ -значение перед регулярным выражением имеет важное значение, иначе оно становится неверно истолковано из-за двойного значения знака \.

+0

Не ошибается, вам просто нужно написать шаблон по-разному: @ "\ bGav \ b" равно "\\ bGav \\ b" – Lucero

+0

Да, точно. Тем не менее, я нахожу дословный строковый литерал (@ "...")), чтобы быть намного лучше для представления регулярных выражений, поскольку правила эвакуации регулярного выражения достаточно сложны, как они есть; бросание синтаксиса C# в микс просто усложняет ситуацию, особенно если вы хотите вставить материал в другие среды, где правила эвакуации редко бывают одинаковыми. –

Смежные вопросы