Поиск определенного слова без предлога или отрицания с помощью регулярного выражения
Возникла необходимость в поиске слова без отрицания или без определенного предыдущего слова. Например, есть предложения, где нужно найти наличие только слова "пружинная" без "не":
- "... слова ... не пружинная ... слова ... пружинная ..."
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 шт):
Это называется Negative Lookbehind, почитать можно здесь https://www.regular-expressions.info/lookaround.html
Поиграться можно здесь https://regex101.com/r/H9bUTD/1
Само выражение, например, для приведенного фрагмента, такое:
(?<!не\s)пружинная
Немного переделал под свои нужды для 3 и 6 вариантов, когда "НЕ" входит в состав другого или текущего слова.
Вот так вышло:
@"(?<!\bне\s)\bпружинная)"
Это работает для строк, где должно быть true:
- "... пружинная, "
- "... пружинная НЕ"
- "... односторонНЕ пружинная, "
И для строк, где должно быть false:
- "НЕ пружинная, "
- "... НЕ пружинная, "
- "... НЕпружинная, "
Надеюсь, что составил данное регулярное выражение корректно.