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

Posted

技术标签:

【中文标题】REGEX_MATCH 匹配 PG 而不是 PG13,反之亦然【英文标题】:REGEX_MATCH to match PG and not PG13 and vice versa 【发布时间】: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$') 命令。 $ 字符有什么作用。谢谢这个作品! 【参考方案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")  

【讨论】:

以上是关于REGEX_MATCH 匹配 PG 而不是 PG13,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

PG集群(PostgreSql环境)搭建

ORACLE 迁移到 PG 之 ora2pg

.htaccess RewriteRule 到路径而不更改 URL

URL Referer 在弹出窗口上不起作用

在 Redshift 中使用 regex_match 的问题

文本文件字符串拆分然后将每个元素输出到视图表中