REGEX_MATCH匹配PG而不是PG13,反之亦然

时间:2016-08-15 10:53:42

标签: regex google-bigquery

我正在使用bigquery,需要匹配评级为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不匹配。< / p>

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

感谢。

2 个答案:

答案 0 :(得分:2)

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

SELECT REGEX_MATCH(PC_Rating, r'PG$')

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

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

答案 1 :(得分:1)

要匹配您可以在下面使用的评级列表中的“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")