пятница, 14 ноября 2008 г.

О простых и хитрых регулярных выражениях

Есть задача:

Из всех строк вида
  • "лучший интернет-магазин"
  • "для интернет магазина"
  • "каталог интернет магазинов"
  • "магазин","
выбрать те, в которых встречается слово "магазин" в именительном падеже. При этом необходимо сопоставлять паттерн поиском регулярного выражения по всей строке (в python - метод search).

Решение:

Первый способ, который приходит в голову - запретить окончания слова:
магазин[^ауеыо]
Это отсеет слова типа "магазина", "магазинов" и т.п. Однако, паттерн отфильтрует и вариант "лучший интернет-магазин", так как слово "магазин" является последним в строке.
Немного попыхтев, пришел к простому решению:
магазин([^ауеыо]|$)
Работает, однако. Если вы найдете лучшее решение, чиркните мне пару строк в комментариях.

Комментариев нет: