Как использовать регулярное выражение для анализа ответа на вопрос из текста - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь проанализировать текст из данных, которые выглядят следующим образом:

id      note_text 
--------------------------------------------------------------- 
1       Screening complete: YesÂCounseled 
2       A is 12 year old·°·°Screening complete: NO - multiple people present·°  
3       °calorie foods/snacksÂScreening complete: NO - card not avail·°·°

Мне просто нужно выяснить, какая фраза следует за "Отбор завершен:", которые представляют собой 3 варианта ответа в структуре набора следующее:

Yes 
NO - multiple people present 
NO - card not avail

Как видите, 'Screening Complete: [answer]' смешан в столбце note_text, окружен другими текстами, которые не имеют структуры.

Для вывода, в идеале, я бы хотел создать отдельный текстовый столбец, который показывает:

id      note_text 
--------------------------------------------------------------- 
1       Screening complete: Yes
2       Screening complete: NO - multiple people present  
3       Screening complete: NO - card not avail

Я никогда не работал с выражением regexp, поэтому я просто полностью потерял на том, как даже подходить, чтобы разобрать эти определенные фразы из столбца свободного текста. Если кто-то может помочь мне написать, как написать выражение регулярного выражения для извлечения ответной фразы, которая появляется после «Отбор завершен:», это было бы очень признательно.

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

В Netezza вы можете использовать regexp_replace():

select regexp_replace(note_text, '^.*(Screening complete:[^Â]+).*$', '\1')

Здесь - это скрипта db <> с использованием Postgres.

0 голосов
/ 19 марта 2020

Регулярное выражение, которое вы ищете:

Screening complete: (?:(?!Â).)*

Найдите строку "Проверка завершена" и получите все, пока не найдете, но не включайте

const text = "Screening complete: YesÂCounseled \nA is 12 year old·°·°Screening complete: NO - multiple people present·°  \n°calorie foods/snacksÂScreening complete: NO - card not avail·°·°";

console.log("Complete text");
console.log(text);
const matches = text.match(/Screening complete: (?:(?!Â).)*/g);

matches.forEach((item, index) => console.log(index + " match: ", item));
...