Попытка разработать регулярное выражение для извлечения предложений, не содержащих определенных слов. Для простоты я приведу простой пример:
Исходные данные: сагиттальные разведывательные изображения шейно-грудного отдела: многоуровневый спондилез легкой и средней степени тяжести. Перелом присутствует.
Желаемый результат: перелом присутствует.
Попытка №1
Регулярное выражение: [^.]*(?!cervi(c|x))[^.]*\.
Фактические выходные данные: сагиттальные разведывательные изображения шейно-грудного отдела: многоуровневый спондилез легкой и средней степени тяжести. Перелом присутствует.
Попытка №2:
Регулярное выражение: [^.]*[^(cervi(c|x))][^.]*\.
Фактические выходные данные: сагиттальные разведывательные изображения шейно-грудного отдела: многоуровневый спондилез легкой и средней степени тяжести. Перелом присутствует.
Можно проверить эти результаты в https://regexr.com/.
?:с?!, по логике вещей, если у вас уже есть группа, которую вы не хотите захватывать (например,(?:)), зачем все еще нужен просмотр вперед? Я экспериментировал с вашим выражением(?<![^.])\s*(?:cervi[cx][^.]*\.)и больше не нашел совпадений. Разве регулярное выражение не будет проверять следующий символ после пробела, чтобы убедиться, что его нет в этой группе? 21.09.2020(?:cervi[cx][^.]*\.)такой же, какcervi[cx][^.]*\., просто соответствуетcervi, затемcилиx, затем любому символу, кроме точки ноль или более раз, а затем.. 22.09.2020[^.]должно быть ограничено тем, что ему соответствует, а(?:(?!cervi[cx])[^.])*соответствует любому символу, кроме точки, которая не является первым символомcervixилиcervic. 22.09.2020