Google 試算表 (google sheet) 搜尋一個或多個關鍵字

Google 試算表如何搜尋關鍵字:文章中探討字串搜尋狀況 (1) 一個中文或英文英文關鍵字、(2) AND 布林邏輯條件多個關鍵字、(3) OR 布林邏輯條件多個關鍵字。

Photo by Direct Media on StockSnap

這篇文章是「Excel 或 Google 試算表搜尋字串的方法比較」的改寫與補充,並加上實務上的處理建議。如果要找 Microsoft Excel 搜尋一個或多個關鍵字,請參考這篇文章 Excel 布林搜尋多個關鍵字

解決方式

狀況1:文章內容是否包含 (一組) 中文關鍵字

搜尋 A2 儲存格內容是否包含「大稻埕」,如果包含回傳 1、不包含則回傳 0 (以下函數 Excel 也可以使用)

= INT(COUNT(SEARCH("大稻埕", A2)))

或者使用 Google 試算表特有的 REGEXMATCH 函數 (Excel 無法使用)

=INT(REGEXMATCH(A2, "大稻埕"))

中文關鍵字可以使用上方兩種函數,如果是英文關鍵字,就會遇到搜尋 app 卻連 Apple 也回傳的問題。

狀況2:文章內容是否包含 (一組) 英文關鍵字

英文關鍵字需要額外處理

  • 不分大小寫:REGEXMATCH 區分大小寫,需要額外加上 (?i) 修飾語
  • 完整英文單字:搜尋 app 但是不要 Apple 內包含 app 的其他單字,需要前後加上單字邊界  \b 符號

搜尋 A2 儲存格內容是否包含 App,如果包含回傳 1、不包含則回傳 0

= INT(REGEXMATCH(A2, "(?i)(\bApp\b)"))

Google 試算表 REGEXMATCH 函數文件說明提到「Google 試算表支援 RE2,但不支援符合規則的 Unicode 字元類別。」RE2 語法不區分大小寫,需要加上 (?i) 修飾語,才能讓搜尋結果可以包含 app 或 App 等狀況。

避免結果除了 app 還包含 apple,需要在英文關鍵字的前後要加上「單字邊界」(word boundary) \b 。要注意中文關鍵字不需要加上「單字邊界」。關於「單字邊界」說明,請見 解決英文字的搜尋:搜尋 app 而不是 apple 【Google 試算表 】 

狀況3:文章內容是否同時包含多個中文關鍵字 (AND)

搜尋 A2 儲存格內容同時包含「大稻埕」與「漁人碼頭」,如果符合條件回傳 1、不符合條件則回傳 0 (以下函數 Excel 也可以使用)

= INT(AND(COUNT(SEARCH("大稻埕", A2)), COUNT(SEARCH("漁人碼頭", A2))))

或者使用 REGEXMATCH 函數 (Excel 無法使用)

= INT(AND(REGEXMATCH(A2, "大稻埕"), REGEXMATCH(A2, "漁人碼頭")))

查詢網路文件,會找到一般程式語法支援的正則表示式規則是:
(?=.*大稻埕)(?=.*漁人碼頭).*
但是在 Google 試算表測試
= INT(REGEXMATCH(A2, "(?=.*大稻埕)(?=.*漁人碼頭).*"))

會遇到 #REF! 錯誤,詳細錯誤訊息

「REGEXMATCH 函式第 2 參數」的值「(?=.*大稻埕)(?=.*漁人碼頭)」是無效的規則運算式。

這是因為 Google 試算表使用的 RE2 library 尚未支援 positive lookahead (?=)。不過當你要查找數十個關鍵字時,很容易會遇到試算表儲存格的函數長度限制:Excel 是8,192 個字元、至於 Google 雖然沒提到函數長度限制,但仍然有儲存格長度限制 50,000 字元數。

因此習慣上會將多個 AND 關鍵字的邏輯,逐一關鍵字拆解放在一個儲存格內,最後再加總另外判斷。

狀況4:文章內容是否同時包含多組英文關鍵字 (AND)

搜尋 A2 儲存格內容是否同時包含「APP」和「application」 (不區分大小寫),如果符合條件回傳 1、不符合條件則回傳 0

= INT(AND(REGEXMATCH(A2, "(?i)(\bApp\b)"), REGEXMATCH(A2, "(?i)(\bapplication\b)")))

狀況5:文章內容是否包含其中一個中文關鍵字 (OR)

搜尋 A2 儲存格內容包含「大稻埕」或「漁人碼頭」其中一個關鍵字,如果符合條件回傳 1、不符合條件則回傳 0 (以下函數 Excel 也可以使用)

= INT(OR(COUNT(SEARCH("大稻埕", A2)), COUNT(SEARCH("漁人碼頭", A2))))

或者使用 REGEXMATCH 函數 (Google 試算表可用、Excel 無法使用)

= INT(OR(REGEXMATCH(A2, "大稻埕"), REGEXMATCH(A2, "漁人碼頭")))

上方函數可以使用 | 符號合併 OR 條件,同時達到減少函數文字長度的目的 (Google 試算表可用、Excel 無法使用)

= INT(REGEXMATCH(A2, "大稻埕|漁人碼頭"))

狀況6:文章內容是否包含其中一個英文關鍵字 (OR)

搜尋 A2 儲存格內容是否包含「APP」或 「application」 (不區分大小寫),如果符合條件回傳 1、不符合則回傳 0

= INT(REGEXMATCH(B2, "(?i)(\bApp\b|\b application\b)"))

精簡一點的版本

= INT(REGEXMATCH(B2, "(?i)\b(App|application)\b"))


 🤘如果想直接動手作,可以前往線上試算表直接編輯。


參考資料

留言