在Google数据工作室中使用google-re2的lookbehind和lookforward的regexp提取

时间:2017-11-08 10:46:18

标签: regex pattern-matching extract google-data-studio

我试图在一个案例参数中构建一个REGEXP_EXTRACT查询,这个查询并没有按照我想要的方式运行。

示例数据:

1234-ABC
1234-abc
1234-ABC-1a
1234
1234-abc-test-this

如果存在的话,我喜欢的是从查询中捕获ABC | abc。如果它不存在,我想返回一个默认值。

我找到了这个页面,我可以看到google-RE2正则表达式的正则表达式可能性:google-RE2 regex

我知道如何构建案例:

CASE
    WHEN REGEXP_MATCH(Eventcategory, '^([0-9])*-([a-zA-Z0-9])*$') THEN 'it matches 1234-ABC and 1234-abc'
    WHEN REGEXP_MATCH(Eventcategory, '^([0-9])*-([a-zA-Z0-9])*-([a-zA-Z0-9])*') THEN 'it matches 1234-ABC-1a and 1234-abc-test-this'
    ELSE "it matches 1234"
END

问题在于提取Eventcategory的正确部分。

到目前为止我尝试了什么:

REGEXP_EXTRACT(Eventcategory, '-([a-zA-Z0-9])*-') // Then it was only still needed to remove the - at the beginning and end
REGEXP_EXTRACT(Eventcategory, '-([a-zA-Z0-9])*$') // if it was 1234-Abc
REGEXP_EXTRACT(Eventcategory, '(?=^([0-9])*-)((-[a-zA-Z])*)')
REGEXP_EXTRACT(Eventcategory, '((-[a-zA-Z])*)')
REGEXP_EXTRACT(Eventcategory, '(?=^([0-9])*-)((-[a-zA-Z])*)')
REGEXP_EXTRACT(Eventcategory, '(-([a-zA-Z])+)')
REGEXP_EXTRACT(Eventcategory, '(?=(^([0-9])*-))(-([a-zA-Z])+)')

真的希望有人可以帮助我,因为我现在没有任何选择

1 个答案:

答案 0 :(得分:2)

要使您的模式有效,您需要在需要提取的模式部分周围使用单个捕获组,将*放在字符类之后并删除$锚点:

'^[0-9]*-([a-zA-Z0-9]*)'

或者,您也可以通过将*(0或更多)替换为+(1个或更多)来确保匹配每个子模式的至少1个字符:

'^[0-9]+-([a-zA-Z0-9]+)'

请参阅the regex demo

或者,您可以使用

^[^-]+-([^-]+)

匹配

  • ^ - 字符串开头
  • [^-]+ - 除-
  • 以外的1个或多个字符
  • - - 连字符
  • ([^-]+) - 第1组(您提取的值):除-以外的1 +个字符

请参阅this regex demo