我想写一个正则表达式从字符串中删除多余的零。 REGEXP_REPLACE(REGEXP_REPLACE("Input_String","^0+", ''),'0+$','')
失败,如果 input_string = 120
那么 output_string = 12
而不是 120
.
以下是预期的输入与输出:
120--> 120
12--> 12
120.00--> 120
000329.0--> 329
14.4200--> 14.42
000430--> 430
0.24000--> 0.24
0.100--> 0.1
1.0--> 1
4条答案
按热度按时间iyfamqjs1#
只需在hadoop系统中用以下内容保存这个文件delete\u ending\u zeroes\u udf.py。
删除\u结尾\u零\u udf.py
并在hive编译中编写以下代码
参考文献:https://acadgild.com/blog/hive-udf-python
44u64gxh2#
如果需要在配置单元中执行相同的操作,请使用cast as decimal(调整到所需的最大精度/比例):
结果:
gzszwxb43#
regex并不总是最好的工具。在实际代码中,我将使用安迪的解决方案。现在,如果你真的想用正则表达式来做,这里有一种可能的分解方法:
字符串开头:
^
尽可能多地取0:0*
在此处开始捕获:(
[0-9]尽可能多地:[0-9]*
字符点(必须转义):\\.
[0-9]尽可能少:[0-9]*?
在此处结束捕获:)
尽可能多的0:0*
字符串结尾:$
这是密码。注意:它不处理整数,但可以用类似的方式处理输出:
如您所见,解析为bigdecimal更具可读性。而且,使用正则表达式并不一定更有效。
6rvt4ljy4#
最简单的方法是使用
BigDecimal
:编辑:这实际上不适用于
000430
:的字符串表示形式是4.3E+2
.您可以通过确保
scale
至少为零: