使用 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:]]+$"
我正在尝试提出一个正则表达式模式,该模式将与 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:]]+$"