gpt4 book ai didi

sql - REGEX 提取没有货币的金额

转载 作者:行者123 更新时间:2023-12-04 01:14:49 25 4
gpt4 key购买 nike

SELECT
ocr_text,
bucket,
REGEXP_EXTRACT('-?[0-9]+(\.[0-9]+)?', ocr_text)
FROM temp

我正在尝试从不包含货币的字符串中提取金额。任何没有小数的数字都不应该匹配。如果逗号遵循正确的规则(在百位标记处),则应该允许使用逗号

56         no       (missing decimals)
56.45 yes
120 no (missing decimals)
120.00 yes
1200.00 yes
1,200.00 yes
1,200 no (missing decimals)
1200 no (missing decimals)
134.5 no (decimal not followed by 2 digits)
23,00.00 no (invalid comma location)

我是 REGEX 的新手,所以我知道我的上述声明已经不符合我列出的标准。但是,我已经在 REGEX_EXTRACT 行上收到错误 (INVALID_FUNCTION_ARGUMENT) premature end of char-class 问题


有人能指出我正确的方向吗?我该如何解决当前的问题?我怎样才能修改以正确合并列出的其他标准?

最佳答案

这是一个正数/负数的通用正则表达式模式,带有两位小数和可选的千位逗号分隔符:

(?<!\S)(?:-?[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{2})|-?[0-9]+(\.[0-9]{2}))(?!\S)

Demo

您更新的查询:

SELECT
ocr_text,
bucket,
REGEXP_EXTRACT(ocr_text, '(?<!\S)(?:-?[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{2})|-?[0-9]+(\.[0-9]{2}))(?!\S)')
FROM temp;

根据我阅读的 Presto 文档,它应该支持 Java 的正则表达式语法。如果环顾四周不起作用,您可以尝试此版本:

SELECT
ocr_text,
bucket,
REGEXP_EXTRACT(ocr_text, '(\s|^)(?:-?[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{2})|-?[0-9]+(\.[0-9]{2}))(\s|$)')
FROM temp;

关于sql - REGEX 提取没有货币的金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63691220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com