【问题标题】:Match only percentage values in Redshift Regex仅匹配 Redshift Regex 中的百分比值
【发布时间】:2019-01-24 17:21:33
【问题描述】:

我在 Redshift 中遇到了一个有些复杂的正则表达式问题。我希望能够提取所有后面有百分号的数值,而没有一个没有百分号的数值。我当前的脚本适用于更简单的示例,但不适用于更复杂的示例。

我有一个包含饮料成分的专栏。

一个简单的例子可能是"95% Apple, 5% Grape"50.25% grape, 49.75% apple。我可以用 '[0-9]+(\.[0-9][0-9]?%)?'。然而,像"50% Apple, 50% Grape, 2mg grape juice""100% Juice,50% Apple, 50% Grape" 这样更复杂的示例会导致我分别提取"2" and 100, 50, and 50,

[0-9]+(\.[0-9][0-9]?%)?

我已经能够抓取每个数字,但我只想抓取带有百分号的数字,其中值“100%”不包含其他百分比值。所以使用这个例子"100% Juice,50% Apple, 50% Grape",我只想要两个 50% 的值。编辑:我还想澄清一下,我正在使用 regexp_substr 函数,因此这两个 50% 的值将通过使用索引在它们自己的列中。

【问题讨论】:

  • 您的正则表达式示例暗示您正在寻找的某些百分比是 50.25%。如果这是真的,那么您应该在上面的测试示例中包含类似的内容。此外,听起来您不想捕获 >= 100% 的任何百分比(包括 150% 或 150.25% 之类的夸张),对吗?
  • 关于 >100%,是的,这是正确的。我将在上面添加一个测试示例来说明这一点。
  • @WalterWhalen 这可以用 python UDF 完成,你看过这个选项吗?您是否能够创建和使用这些(您需要获得访问权限)。以stackoverflow.com/questions/54084967/… 为例。让我知道这是否适合您,我可能会提供答案。
  • 你解决了吗?如果是,请发布答案

标签: sql regex amazon-redshift


【解决方案1】:

你可以使用类似下面的东西

\b\d?\d%\s
https://regex101.com/r/wxGfaX/1

【讨论】:

    【解决方案2】:

    这是使用 python udf 的答案

    create or replace function process_percentages(InputStr varChar)
      returns varchar
    stable
    as $$
        import re
        OutputStr = ''
        pattern=re.compile('(\d+(\.\d+)?%)')
        if ('100%' in InputStr) & (InputStr.count('%') == 1):
            OutputStr='100%,'
        else:
            for m in re.finditer(pattern, InputStr):
                if float(m.group(1)[:-1]) < 100.0:
                    OutputStr+=m.group(1) + ','
        return OutputStr[:-1]
    $$ language plpythonu;
    

    那么你可以像这样使用它:

    Select process_percentages('10% Apple, 10% 5% Grape');
    Select process_percentages('100% 10% Apple, 10% 5% Grape');
    Select process_percentages('123% nothing 10% Apple, 10% Grape');
    Select process_percentages('100% Apple, Grape');
    Select process_percentages('10.56% Apple, 5.22% Grape');
    

    如果您的需求变得有点复杂,这总是可行的并且很容易定制。

    您确实需要先关注https://docs.aws.amazon.com/redshift/latest/dg/udf-security-and-privileges.html 以获得权​​限

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-07
      • 2014-03-07
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      相关资源
      最近更新 更多