【发布时间】:2020-05-03 15:41:23
【问题描述】:
我正在尝试使用 RegEx 从我的一个列中的字符串中提取一些信息。
我需要定义第二列,等于第一列中第 2 次和第 3 次出现连字符之间的值。
经过多次谷歌搜索,我设法做到了这一点:
IFNULL(SAFE.REGEXP_EXTRACT(Final.CampaignName, r"(?:\w+\s+-\s+){2}(\w+)\s+-"), "Other") AS CampaignCategory
Final.CampaignName 中的字符串的外观示例:
S - 橙子 - 酒吧 - 苹果
S - 苹果 - Foo Bar - 橙子 - 香蕉
S - 苹果 - 酒吧
如果第二个和第三个连字符之间有 1 个单词,我的正则表达式只会返回该值,但我需要返回整个文本(减去前导和尾随空格)。
谁能指导我做这件事的正确方向?
谢谢!
【问题讨论】:
-
请编辑以阐明每个示例要返回的内容。前两个很明显。对于第三个,第二个和第三个连字符之间没有文本(因为没有第三个连字符),那么要返回什么?一个空字符串?一个错误?如果您想返回
Bar,您需要修改问题的措辞。不同的答案对此做出了不同的假设。 -
基于上下文 - 我强烈认为第三个示例的输出应该是 Bar。显然这是假设上下文被正确表示。
-
我很抱歉。我确实希望第三个示例也能返回
Bar。谢谢你们两个的回答。 Cary 帮助我更好地理解 RegEx,而 Mikhail 为我的 BQ 示例提供了完美的答案 :)
标签: regex google-bigquery