使用 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 查找两个字符之间带有单引号的字符串?