поиск текста между словами в несколько строк - PullRequest
1 голос
/ 30 мая 2019

В тексте ниже я пытаюсь определить, к какому члену семьи принадлежит текст. Комментарий будет предшествовать члену семьи. Так что в приведенном ниже примере я должен только идентифицировать Мать .. у отца нет комментария

some stuf Father 
more stuff Mother

Comment: Deceased

После поиска и пробного негативного поиска я все еще не могу заставить его работать .. Так, например ..

Father(?!Mother).*Comment:\s?(deceased|died)

Это регулярное выражение НЕ должно найти совпадение. Но оно заканчивается совпадением

Father 
more stuff Mother

Comment: deceased

Если я поменяю Мать и Отца, это совпадет правильно .. Но мне не нужно совпадать в примере, потому что комментарий не принадлежит Отцу

1 Ответ

1 голос
/ 30 мая 2019

Вы должны расширить отрицательный взгляд (?!.*?Mother), чтобы соответствовать любому символу 0+ раз, иначе это будет утверждать, что прямо справа не Мать.

В этом случае Мать не следует сразу послеОтец, поэтому утверждение успешно выполняется, и эта часть .*Comment будет соответствовать до последнего появления комментария, где могут совпадать последующие элементы.

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

Father(?!.*?Mother).*Comment:\s?(deceased|died)

Regexдемо

Возможно, вы можете сделать так, чтобы подход «точка-звезда» для Комментария не был жадным, чтобы не допустить чрезмерного соответствия:

.*?Comment
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...