首页 > 解决方案 > 根据前面的单词从段落中提取数值

问题描述

我正在处理列中的一些大文本字段。经过一些清理后,我有如下内容:

truth_val: ["5"]
xerb Scale: ["2"]
perb Scale: ["1"]

我想提取数字 2。我正在尝试匹配字符串“xerb Scale”,然后提取 2。我尝试捕获包含 2 的组,(?:xerb Scale:\s\[\")\d{1}并尝试通过负面展望排除匹配的组,但没有运气。

这将在 SQL 查询中,我试图通过REGEXP_EXTRACT()函数提取数值。此查询是将此信息加载到数据库中的管道的一部分。

任何帮助将非常感激!

标签: regexpresto

解决方案


您应该匹配您不需要获取的内容以便为您的匹配设置上下文,并且您需要匹配并捕获您需要提取的内容:

xerb Scale:\s*\["(\d+)"]
                 ^^^^^  

请参阅正则表达式演示。在 Presto 中,用于REGEXP_EXTRACT获取第一个匹配项:

SELECT regexp_extract(col, 'xerb Scale:\s*\["(\d+)"]', 1); -- 2
                                                      ^^^

注意1论点:

regexp_extract(string, pattern, group) → varchar
查找第一次出现的正则表达式patternstring返回捕获组号 group


推荐阅读