使用 Impala regexp_like 查找小数值

Finding decimal values using Impala regexp_like

我正在尝试提出一个正则表达式模式,该模式将与 Impala 中的 regexp_like 一起使用,并将匹配小数的值(最多十个数字后跟小数点,然后一个或多个数字)。

我有一个在 .NET 中工作的模式 ("^-?\d{1,10}\.\d+$"),但这在 regexp_like 中不起作用。

我在 Impala ("^-?[0-9]{1,10}\.[0-9]+$") 中尝试过类似的方法,但它始终为整数返回 true。为什么不要求有小数?

一些预期的场景结果:

0 = False
0. = False
.5 = False
0.1 = True
123456 = False
-123456 = False
123456.2 = True
-123456.2 = True
Test = False

我想让它变得更复杂,并禁止以多个零开头的数字,但我什至不能让它要求小数点。

您的正则表达式仍然匹配整数,因为字符串文字中 d 之前的 \ 消失,而 . 保留并匹配字符串中的任何字符。

Impala REGEXP_LIKE documentation:

Because the impala-shell interpreter uses the \ character for escaping, use \ to represent the regular expression escape character in any regular expressions that you submit through impala-shell . You might prefer to use the equivalent character class names, such as [[:digit:]] instead of \d which you would have to escape as \d.

因此,您可以使用

"^-?[0-9]{1,10}\.[0-9]+$"
"^-?\d{1,10}\.\d+$"
"^-?[[:digit:]]{1,10}\.[[:digit:]]+$"