选择组的正则表达式

sigwle7e  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(473)

在配置单元中,我有一个组分隔符为“^”的字段和组中由“~”分隔的字段,示例值:

1~~0~4~6^7~~0~3~4^19~~1~4~6^88~~0~4~6^1~~0~4~6
5~~0~4~6^8~~0~3~4^5~~0~4~6^88~~0~4~6^18~~3~4~4^99~~4~5~8

我需要在第三个字段中选择所有非零值的组。
例子:

1~~0~4~6^7~~0~3~4^19~~**1**~4~6^88~~0~4~6^1~~0~4~6

在这里 19~~1~4~6 将被选中,因为第三个字段是1

5~~0~4~6^8~~0~3~4^5~~0~4~6^88~~0~4~6^18~~**3**~4~4^99~~**4**~5~8

在这里 18~~3~4~4 以及 99~~4~5~8 将被选中。
正则表达式是如何形成的,因为这里有“if”条件。

nnt7mjpx

nnt7mjpx1#

select  pe.val
from    mytable t lateral view posexplode (split(t.str,'\\^')) pe
where   split(pe.val,'~')[2] <> '0'
+-----------+
|    val    |
+-----------+
| 19~~1~4~6 |
| 18~~3~4~4 |
| 99~~4~5~8 |
+-----------+
sulc1iza

sulc1iza2#

[0-9]*~[0-9]*~[1-9][0-9]*~[0-9]*~[0-9]*

这与组分隔符无关。它只找到任何交替的~和数字序列,中间的一个既不是空的也不是零。

regex解释道:

[0-9]*        - match zero or more numbers
~             - match literal ~ character
[0-9]*
~
[1-9][0-9]*   - match one character between 1 and 9 followed by zero or more numbers (basically it means 'match any number but it can't start with zero)
~
[0-9]*
~
[0-9]*

如果您的输入总是与示例中的格式相同,那么这将起作用。例如,如果一个组包含更多或更少的字段分隔符~,则需要进行一些调整。

相关问题