【问题标题】:REGEX_MATCH to match PG and not PG13 and vice versaREGEX_MATCH 匹配 PG 而不是 PG13,反之亦然
【发布时间】:2016-08-15 10:53:42
【问题描述】:

我正在使用 bigquery,需要为评级为 PG 的电影匹配 PG,为评级为 PG 的电影匹配 PG13。

我正在努力寻找 BQ 实施 REGEX_MATCH 的良好来源,并希望得到一些帮助。

所以,为了找到 PG,我尝试了 SELECT REGEX_MATCH(PC_Rating, r'PG'),它找到了正确的值,但是当我尝试排除 PG13 时,如下SELECT REGEX_MATCH(PC_Rating,r'PG![0-9]{2}')SELECT REGEX_MATCH(PC_Rating,r'PG^[0-9]{2}') 它与 PG 不匹配。

我的专栏有 PG 或 PG13*,其中 * 可以是以下 [VSLNP] 中的一个或多个。

谢谢。

【问题讨论】:

  • 试试SELECT REGEX_MATCH(PC_Rating, r'PG$') 命令。
  • $ 字符有什么作用。谢谢这个作品!

标签: regex google-bigquery


【解决方案1】:

在正则表达式中使用$ 进行完全匹配。

SELECT REGEX_MATCH(PC_Rating, r'PG$')

r'PG$' 将匹配所有以PG 结尾的字符串。您可以通过在开头添加行锚^ 的开头来进行更精确的匹配。

SELECT REGEX_MATCH(PC_Rating, r'^PG$')

【讨论】:

  • 谢谢,出于兴趣,什么是 NOT 运算符。例如!^PG For 不以 PG 开头。我见过!^
  • "for 不以PG开头",^(?!PG),不知道GBQ是否支持负前瞻..
【解决方案2】:

要匹配评级列表中的“PG”,您可以在下面使用。 它不依赖于该评级在列表中的位置(开始、结束或中间......)

WHERE REGEXP_MATCH(PC_Rating, r"\bPG\b")

注意,REGEXP_MATCH 是一个相对昂贵的函数——所以如果“RG”值是你在列中期望的唯一值——你应该使用

WHERE PC_Rating = "PG" 

为了匹配PG13*, where * can be one or many of the following [VSLNP],你可以在下面使用

WHERE REGEXP_MATCH(PC_Rating, r"\bPG13(V|S|L|N|P)*\b")  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多