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的新手,所以我知道我的上述声明已经不符合我列出的标准。但是,我已经无法在我的(INVALID_FUNCTION_ARGUMENT) premature end of char-class行中得到错误的REGEX_EXTRACT
有人能给我指明正确的方向吗?我如何解决我目前的问题?如何修改以正确地纳入所列的其他标准?
发布于 2020-09-01 16:04:09
下面是一个带有两个小数位和可选的数千逗号分隔符的正负数的通用正则表达式:
(?<!\S)(?:-?[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{2})|-?[0-9]+(\.[0-9]{2}))(?!\S)
更新后的查询:
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不起作用,您可以尝试这个版本:
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;发布于 2020-09-01 16:20:41
REGEXP_EXTRACT('^-?(\d*.\d*)',ocr_text)
模式:^[-]?(\d*\.\d*)
解释
^ -线的开始
[-]? -有或没有负破折号(-)
\d* -0或更多位数
\. -小数(转义,因为在正则表达式中小数被认为是特殊字符)。
\d* -0或更多位数(小数部分);
$ -线路的末端。
奖励提示:有一些有用的工具在线测试你的正则表达式!
发布于 2022-01-05 06:07:08
下面的代码可以像所有数字一样提取值,但是它捕获了所有的值,只有特定于某些字母的值不能很好地工作。任何人,请给我建议。
-?\d+\.?\d*我已经完成了使用Regex的NLP的工作。
https://stackoverflow.com/questions/63691220
复制相似问题