【问题标题】:Extracting a numerical value from a paragraph based on preceding words根据前面的单词从段落中提取数值
【发布时间】:2020-06-17 12:59:33
【问题描述】:

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

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

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

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

任何帮助将不胜感激!

【问题讨论】:

标签: regex presto


【解决方案1】:

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

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

请参阅regex demo。在 Presto 中,使用REGEXP_EXTRACT 获得第一个匹配项:

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

注意1 参数:

regexp_extract(string, pattern, group) → varchar
string 中查找第一次出现的正则表达式pattern 并返回capturing group number group

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 2022-10-15
    • 2020-09-30
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多