Поиск определенного слова без предлога или отрицания с помощью регулярного выражения

Возникла необходимость в поиске слова без отрицания или без определенного предыдущего слова. Например, есть предложения, где нужно найти наличие только слова "пружинная" без "не":

  • "... слова ... не пружинная ... слова ... пружинная ..." true
  • "... слова ... не пружинная и пружинная ..." true
  • "... слова ... пружинная, не пружинная ..." true
  • "... слова ... пружинная ..." true
  • "... слова ... не пружинная ..." false

Не могу подобрать регулярное выражение, для метода:

private static bool IsMatch(string regExp, string s)
{
    Regex regex = new Regex(regExp, RegexOptions.IgnoreCase);
    return regex.IsMatch(s);
}

Спасибо за любую помощь или направление, куда копать. Без регулярного могу решить эту задачу, но интуитивно чувствую, что и с регулярным выражением есть решение))


Ответы (2 шт):

Автор решения: Nisus

Это называется Negative Lookbehind, почитать можно здесь https://www.regular-expressions.info/lookaround.html

Поиграться можно здесь https://regex101.com/r/H9bUTD/1

Само выражение, например, для приведенного фрагмента, такое:

(?<!не\s)пружинная
→ Ссылка
Автор решения: Pavel

Немного переделал под свои нужды для 3 и 6 вариантов, когда "НЕ" входит в состав другого или текущего слова.

Вот так вышло:

@"(?<!\bне\s)\bпружинная)"

Это работает для строк, где должно быть true:

  1. "... пружинная, "
  2. "... пружинная НЕ"
  3. "... односторонНЕ пружинная, "

И для строк, где должно быть false:

  1. "НЕ пружинная, "
  2. "... НЕ пружинная, "
  3. "... НЕпружинная, "

Надеюсь, что составил данное регулярное выражение корректно.

→ Ссылка