在google data studio中使用google-re2进行带Lookback和lookforward的regexp提取

在google data studio中使用google-re2进行带Lookback和lookforward的regexp提取,regex,google-data-studio,re2,Regex,Google Data Studio,Re2,我正在尝试在CASE语句中构建一个REGEXP\u EXTRACT查询,该语句的运行方式与我想要的不太一样: 示例数据: 1234-ABC 1234-abc 1234-ABC-1a 1234 1234-abc-test-this 我想从查询中找出ABC | ABC,如果存在的话。如果它不存在,我想返回一个默认值 我找到了一个页面,在那里我可以看到正则表达式的可能性 我知道如何构建案例: CASE WHEN REGEXP_MATCH(Eventcategory, '^([0-9])*-(

我正在尝试在
CASE
语句中构建一个
REGEXP\u EXTRACT
查询,该语句的运行方式与我想要的不太一样:

示例数据:

1234-ABC
1234-abc
1234-ABC-1a
1234
1234-abc-test-this
我想从查询中找出
ABC | ABC
,如果存在的话。如果它不存在,我想返回一个默认值

我找到了一个页面,在那里我可以看到正则表达式的可能性

我知道如何构建案例:

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])+)')

真的希望有人能帮助我,因为我现在没有任何选择余地。

要使您的模式正常工作,您需要在需要提取的模式部分周围使用一个捕获组,将
*
放在字符类之后,并移除
$
锚定:

'^[0-9]*-([a-zA-Z0-9]*)'
或者,您也可以通过将
*
(0或更多)替换为
+
(1或更多)来确保每个子模式至少匹配1个字符:

或者,您可以使用

^[^-]+-([^-]+)
它会匹配的

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

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