2016-08-15 47 views
2

我正在使用bigquery,並且需要匹配PG的電影,這些電影被評爲PG和PG13等級的電影。REGEX_MATCH匹配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爲true。

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

感謝。

+0

試用一下'SELECT REGEX_MATCH(PC_Rating,R'P G $')'命令。 –

+0

$字符是做什麼的。謝謝你的工作! –

回答

2

在正則表達式中使用$做一個完全匹配。

SELECT REGEX_MATCH(PC_Rating, r'PG$') 

r'PG$'會匹配所有與PG結束的字符串。您可以通過在開始處添加行首錨點^來進行更精確的匹配。

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

謝謝,出於興趣的緣故,NOT運算符是什麼。例如'!^ PG' For不以PG開頭。我看到的是'!'和'^' –

+0

「因爲不用PG開始」,所以'^(?! PG)',不知道GBQ是否支持負向預測。 –

+0

非常感謝。 –

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")