2016-11-30 3 views
-2

Многие подобные вопросы уже существуют, но они не решают мою проблему. Теперь, с учетом сказанного, предположим, что у меня есть предложение - «пациент был перенесен на прием к наблюдению», и я хочу сопоставить только часть «к - - - - наблюдению». Теперь, если у меня есть «для общности»/для наблюдений «внутри предложения» до - - - - наблюдения », то я не хочу его сопоставлять.Исключить совпадение, если оно содержит шаблон регулярного выражения

Моя регулярное выражение выглядит следующим образом:

(\bin\b|\bto\b|\badmit\b).{0,100}(observation\b|\bobserve\b|\bobs\b) 

но когда я использую негативный взгляд вперед, как как это (для?!):

(\bin\b|\bto\b|\badmit\b).{0,100}(?!(for))(observation\b|\bobserve\b|\bobs\b) 

это все еще соответствует всем. Что мне нужно, чтобы регулярное выражение выполнялось, если оно «признается для наблюдения/наблюдения/наблюдения», оно будет соответствовать. Но если есть «признать для наблюдений/для obs/in наблюдений», то это не будет соответствовать.

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

((\bin\b|\bto\b)(?!.*for.*(?:\bobs\b|observations\b)).{0,100}(observation\b|\bobserve\b|\bobs\b))|((observation\b|\bobserve\b|\bobs\b).{0,100}(\bstatus\b|\bplace\b|time\b))|(\b(status|place[d]?|placing|admit(?:ted)?|(?:ting)?|start|time|move[d]?)\b.{0,100}(observation\b)) 
+0

вы используете конкретный язык, кроме регулярных выражений? – npinti

+1

Вопрос неясен. Просьба уточнить некоторые примеры текста ввода и ожидаемых результатов. Также добавьте тег инструмента/языка. –

+0

Я использую http://regexr.com/, мне просто нужно регулярное регулярное выражение. Я обновил вопрос и приложил скриншот. Спасибо – feather

ответ

0

Вы не указали регулярное выражение вкуса, но если он поддерживает просмотровых задом, попробуйте

\b(in|to|admit)\b.{0,100}(?<!for\s)\b(observation|observe|obs)\b 

See it here at regex101.

Какую негативный взгляд вперед делает, чтобы проверить, что ни одно из слов observation, observe, obs начать с for, что довольно очевидно, что они не делают;)

Редактировать

Хорошо, так что это JS. Вы можете попробовать что-то вроде:

\b(in|to|admit|was)\b.{0,100}(?!\bfor)...\s(observation|observe|obs)\b 

Он просто делает, что символы перед ключевым словом не for. (Тем не менее, перед словом требуется не менее трех символов.)

Example here at regex101.

(я freewheeled немного там;)

+0

regex flavor - это javascript, и он дает ошибку шаблона в js, но спасибо за ваш вклад. Я также обновил вопрос – feather

+0

Используйте необязательную группу захвата и проверьте, не определено ли это. Если это так, возьмите матч, иначе, отбросьте. –

+0

Это не тот случай, когда я собираюсь, вы предполагаете, что после «для» есть 3 символа, а затем ключевые слова, в моем случае может быть любое количество символов перед ключевыми словами @ClasG – feather

0

Вы можете проверить с (\bfor\s+)? если есть for + пробел (ы) перед observation, observe и т.д., и если for подобран, выбросьте матч , еще захватить его:

var regex = /\b(in|to|admit|was)\b.{0,100}?(\bfor\s+)?(observation|observe|obs)\b/g; 
 
const str = "late case manager feels safest to admit for obs as pt lives ...\nw pt case manager wil to admist obs 1930 pt"; 
 
var m, res=[]; 
 
while ((m = regex.exec(str)) !== null) { 
 
    if (m[2] === undefined) { 
 
     res.push(m[0]); 
 
    } 
 
} 
 
console.log(res);

+0

Я выяснил, что работает: http://regexr.com/3epjq, спасибо большое – feather

+0

Мой подход намного чище. Aslo, проще поддерживать и расширять. –

+0

ваше решение соответствует почти всему, что я не хочу сопоставлять, вы можете видеть себя, просто вставив регулярное выражение в мою ссылку. – feather

 Смежные вопросы

  • Нет связанных вопросов^_^