【问题标题】:Extract text from <> tags searching a certain pattern从搜索特定模式的 <> 标记中提取文本
【发布时间】:2019-05-19 04:58:20
【问题描述】:

我有这个模式。我想为STATUS 提取HISTORY0 模式,它是WAS 值(在标签&lt;SINGLE&gt; 中)和IS 值(在标签&lt;MARRIED&gt; 中) 并分成新的列:

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,但它非常复杂。请帮忙。

【问题讨论】:

标签: sql regex function teradata


【解决方案1】:

你可以使用 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

使用@Tim 在他删除的答案中使用的相同正则表达式

【讨论】:

    猜你喜欢
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2015-12-25
    相关资源
    最近更新 更多