Какой механизм регулярных выражений соответствует «лыжам», а не «водным лыжам»? - PullRequest
0 голосов
/ 08 июня 2009

Какой механизм регулярных выражений можно использовать для сопоставления слов "лыжи", а не "водных лыж"?

Или совпадение «лыжи», но не «продажа лыж»?

Можно ли включить краткое объяснение?

Обновление: я имею в виду, например, что оно должно соответствовать «соревнованию по лыжам 2009 года», а не «соревнованию по водным лыжам 2009 года».

Ответы [ 2 ]

11 голосов
/ 08 июня 2009

Для обновленной части вам нужно использовать отрицательный взгляд. Что-то вроде

(?<!water\s*)(ski\b)

Это должно соответствовать слову лыж, где вода не является предыдущим словом.

РЕДАКТИРОВАТЬ: я настроил регулярное выражение выше, и я имел в виду негативное оглядывание назад, а не обратные ссылки. Для лыж и лыжных соревнований, но не для продажи лыж, вам нужен негативный прогноз. E.g.:

(\bski)(?!\s*sale)

См. http://www.regular -expressions.info / lookaround.html для более подробного объяснения.

0 голосов
/ 09 июня 2009

Вы всегда можете выполнить поиск в несколько проходов, сначала удалите все экземпляры продажи водных лыж и лыж из строки, а затем выполните IsMatch. В C # это будет выглядеть так.

string line = Console.ReadLine();
line = Regex.Replace(line, "water ski", "");
line = Regex.Replace("ski sale", "");
bool matchFound = line.IsMatch("ski");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...