【问题标题】:regexp extract with lookbehind and lookforward with google-re2 in google data studio正则表达式提取与后向和期待与谷歌数据工作室中的 google-re2
【发布时间】:2017-11-08 10:46:17
【问题描述】:

我正在尝试在 CASE 语句中构建一个 REGEXP_EXTRACT 查询,但效果并不理想:

示例数据:

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

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

我找到了一个页面,可以看到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])+)')

真的希望有人可以帮助我,因为我目前没有任何选择。

【问题讨论】:

    标签: regex google-data-studio re2


    【解决方案1】:

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

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

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

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

    the regex demo

    或者,您可以使用

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

    会匹配

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

    this regex demo

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 1970-01-01
      • 2021-10-31
      • 2019-07-17
      • 2015-10-17
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多