首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有货币的REGEX提取量

问没有货币的REGEX提取量
EN

Stack Overflow用户
提问于 2020-09-01 15:52:25
回答 3查看 323关注 0票数 3
代码语言:javascript
复制
SELECT
    ocr_text,
    bucket,
    REGEXP_EXTRACT('-?[0-9]+(\.[0-9]+)?', ocr_text)
FROM temp

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

代码语言:javascript
复制
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的新手,所以我知道我的上述声明已经不符合我列出的标准。但是,我已经无法在我的(INVALID_FUNCTION_ARGUMENT) premature end of char-class行中得到错误的REGEX_EXTRACT

有人能给我指明正确的方向吗?我如何解决我目前的问题?如何修改以正确地纳入所列的其他标准?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-01 16:04:09

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

代码语言:javascript
复制
(?<!\S)(?:-?[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{2})|-?[0-9]+(\.[0-9]{2}))(?!\S)

​

演示

​

更新后的查询:

代码语言:javascript
复制
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的regex语法。如果this不起作用,您可以尝试这个版本:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2020-09-01 16:20:41

REGEXP_EXTRACT('^-?(\d*.\d*)',ocr_text)

模式:^[-]?(\d*\.\d*)

解释

^ -线的开始

[-]? -有或没有负破折号(-)

\d* -0或更多位数

\. -小数(转义,因为在正则表达式中小数被认为是特殊字符)。

\d* -0或更多位数(小数部分);

$ -线路的末端。

奖励提示:有一些有用的工具在线测试你的正则表达式!

票数 2
EN

Stack Overflow用户

发布于 2022-01-05 06:07:08

下面的代码可以像所有数字一样提取值,但是它捕获了所有的值,只有特定于某些字母的值不能很好地工作。任何人,请给我建议。

代码语言:javascript
复制
-?\d+\.?\d*

我已经完成了使用Regex的NLP的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63691220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档