如何使用正则表达式从文本中解析问题的答案
How to use regexp to parse answer to question from text
我正在尝试从如下所示的数据中解析文本:
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·°·°
我只需要弄清楚 "Screening complete:" 后面是什么短语,这是以下集合结构中的 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
表达式,所以我完全不知道如何从自由文本列中解析这些特定的短语。如果有人可以帮助指导我如何编写正则表达式来提取 'Screening complete:' 之后的答案短语,那将不胜感激..
您要查找的正则表达式是:
Screening complete: (?:(?!Â).)*
查找字符串 "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));
在 Netezza 中,您可以使用 regexp_replace()
:
select regexp_replace(note_text, '^.*(Screening complete:[^Â]+).*$', '')
Here 是一个使用 Postgres 的 db<>fiddle。
我正在尝试从如下所示的数据中解析文本:
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·°·°
我只需要弄清楚 "Screening complete:" 后面是什么短语,这是以下集合结构中的 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
表达式,所以我完全不知道如何从自由文本列中解析这些特定的短语。如果有人可以帮助指导我如何编写正则表达式来提取 'Screening complete:' 之后的答案短语,那将不胜感激..
您要查找的正则表达式是:
Screening complete: (?:(?!Â).)*
查找字符串 "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));
在 Netezza 中,您可以使用 regexp_replace()
:
select regexp_replace(note_text, '^.*(Screening complete:[^Â]+).*$', '')
Here 是一个使用 Postgres 的 db<>fiddle。