使用 Impala regexp_like 查找十进制值

Posted

技术标签:

【中文标题】使用 Impala regexp_like 查找十进制值【英文标题】:Finding decimal values using Impala regexp_like 【发布时间】:2020-10-29 16:45:51 【问题描述】:

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

我有一个在 .NET ("^-?\d1,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

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

【问题讨论】:

试试"^-?[0-9]1,10\\.[0-9]+$" 反斜杠通常是字符串中的文字转义,因此您需要转义反斜杠,以便将反斜杠发送到正则表达式引擎。 【参考方案1】:

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

见Impala REGEXP_LIKE documentation:

因为 impala-shell 解释器使用 \ 字符 转义,用\\表示正则表达式转义字符 在您通过 impala-shell 提交的任何正则表达式中。你 可能更喜欢使用等效的字符类名称,例如 [[:digit:]] 而不是 \d,您必须将其转义为 \\d

因此,您可以使用

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

【讨论】:

谢谢您,先生。那让我发疯了。我想知道为什么 "\d" 也不起作用。

以上是关于使用 Impala regexp_like 查找十进制值的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE:如何使用 regexp_like 查找两个字符之间带有单引号的字符串?

Oracle Regexp_like 使用 AND 子句

在 Impala 中查找百分比作为子查询

REGEXP_LIKE 匹配与特定字符串不同的 xml 标记内容

在 Impala 中查找月份中的第几周

在 impala 中查找连续值