从<>标记中提取文本以搜索特定模式

时间:2018-12-18 18:03:35

标签: sql regex function teradata

我有这种模式。我想为HISTORY0提取STATUS模式,它是WAS值(在标签<SINGLE>中)和IS值(在标签<MARRIED>中) 并分成新列:

HISTORY0:<NAME>WAS<ABC>IS<XYZ>
HISTORY1:<NOMBRE>WAS<ABC>IS<XYZ>HISTORY0:<ID>WAS<123>IS<456>
HISTORY1:<ID>WAS<123>IS<456>HISTORY0:<STATUS>WAS<SINGLE>IS<MARRIED>
HISTORY1:<ESTADO>WAS<SOLTERO>IS<CASADO>

我尝试使用REGEX,但是它非常复杂。请帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用RegExp_Substr:

RegExp_Substr(col, '(?<=HISTORY0:<STATUS>WAS<)[^>]+',1,1,'i')       -- WAS
RegExp_Substr(col, 'HISTORY0:<STATUS>WAS<(\w+)>IS<\K[^>]+',1,1,'i') -- IS

"(?<=.....)" is a lookbehind (without adding it to the result)
"\K" means, forget the match up to here

但是使用未公开的文档要简单一些

RegExp_Substr_gpl(col, 'HISTORY0:<STATUS>WAS<(\w+)>IS<(\w+)>',1,1,'i', 1) -- WAS
RegExp_Substr_gpl(col, 'HISTORY0:<STATUS>WAS<(\w+)>IS<(\w+)>',1,1,'i', 2) -- IS

使用与他删除的答案中相同的RegEx @Tim