#regex
#регулярное выражение
Вопрос:
Следующее вернет значение NULL для 'im a cute hippo. you are a giraffe'
, но как мне получить отрицательный взгляд, чтобы разрешить слова между cute и hippo? Я пытался (?<!scute.*)
, но это недопустимо и (?<!scute)[^.]*
позволяет все с hippo.
REGEXP_EXTRACT('im a cute and ugly hippo. you are a giraffe', '[^.?!]*(?<!scute)hippo[^.?!]*[?.]')
Хотите: вернуть значение NULL
Ответ №1:
Не все движки регулярных выражений допускают поиск с переменной длиной. Ваш, похоже, один из тех, которые этого не делают. (Вы не сказали, что именно вы используете, поэтому я не могу сказать наверняка.)
Вы можете сделать должное без поиска. Это выражение соответствует всем предложениям (*), где слово «милый» стоит перед словом «бегемот».
[^.?!]*bcuteb[^.?!]*b(hippo)b[^.?!]*[.?!]
Возможно, вам потребуется второй шаг, чтобы извлечь из него подстроку, или, возможно, вы можете использовать группу.
«Разделы текста, разделенные , .
, или ?
.» !
(*) Это не удается для всех распространенных сценариев, таких как цитируемая речь или предложения с сокращениями или датами в них и т. Д. И т. Д.
Комментарии:
1. Чтобы уточнить, я хотел бы «я милый и уродливый бегемот. вы — жираф», чтобы вернуть значение NULL, но в настоящее время оно возвращает значение NULL только для «я милый бегемот. ты жираф «. Я попробовал предложенное вами регулярное выражение, но оно возвращает «Я милый бегемот». Я попробую второй шаг извлечения, спасибо!
2. @jyu429 Вам может показаться понятным, чего вы хотите, мне это непонятно. Попробуйте описать требование по-другому.
3. Конечно, я хочу идентифицировать все предложения со словом «бегемот» в нем, но НЕ в том случае, если перед ним где-нибудь есть «милый». Помогло ли это?
4. @jyu429 Ах, конечно. Я бы использовал для этого два шага — идентифицируйте все предложения с «hippo» одним выражением, а затем используйте
AND NOT
для удаления тех, которые вы не хотите иметь. В качестве настройки производительности сначала поместите выражение, которое удаляет больше строк из результирующего набора, в зависимости от ваших данных.