【发布时间】: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