RegExp 从管道分隔的字符串中提取值
Posted
技术标签:
【中文标题】RegExp 从管道分隔的字符串中提取值【英文标题】:RegExp extract value from pipe delimited string 【发布时间】:2019-10-29 14:15:31 【问题描述】:我对 regexp 函数很陌生,想要一些建议。 我有一个包含管道分隔值的字段,并希望根据另一个值的位置提取一个值。 这样做的原因是我想要的值并不总是设置,但总是倾向于排在另一个值的第 5 位。希望到目前为止我说得通。
这里是字符串的一个例子:
|XYZ|CBA|365|15841.25|43.40|20171202|20181201|365|17024.94|46.64||20171202|20181201|365|17024.94|46.64||0.00|546.18|0000|
我想提取粗体和斜体的数字 - 546.18,它往往出现在第三个“365”之后的第 5 位,或者从下往上的第一个 365,这是我更喜欢的。
我已尝试反转字符串并获取 365 的第一个实例
第一步——反转字段(内容) 反向(内容)作为 content_rev
第二步 - 从 563 的第一个实例中恢复前 55 个字符并将字符串反转回原始
reverse(substr(content_rev, instr(content_rev, '\|563\|')-50, 55)) as extract_content
输出如下所示: |365|17024.94|46.64||0.00|546.18|8528|02|0540023096|2|2
从这一点上不确定如何获得突出显示的值
我确信这种方式不是最有效的方法,所以如果有人有更好的方法来获得结果,将不胜感激。
【问题讨论】:
461.01 另外,您使用的是 mysql 还是 Hive?它们不是一回事。 对不起,我使用 hive sql,我更正了应该是 546.18 的数字 【参考方案1】:使用 | 分割作为分隔符并取第 5 个元素。
split(your_string, '\\|')[5]
your_string 是你使用反向等得到的:|365|17024.94|46.64||0.00|546.18|8528|02|0540023096|2|2
【讨论】:
以上是关于RegExp 从管道分隔的字符串中提取值的主要内容,如果未能解决你的问题,请参考以下文章
Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]
通过删除 Laravel 中的多余字符,从斜杠分隔的 url 中提取参数值