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, "漁人碼頭")))
(?=.*大稻埕)(?=.*漁人碼頭).*
= 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"))
🤘如果想直接動手作,可以前往線上試算表直接編輯。
參考資料
- Google Spreadsheets Regex Case Insensitive (Regexreplace) - Stack Overflow
- REGEXMATCH - 文件編輯器說明
- Syntax · google/re2 Wiki
- Please support negative lookahead (?!) · Issue #156 · google/re2
- Regex AND operator in Google Sheets - Stack Overflow
- Excel 的規格及限制 - Microsoft 支援服務 提到「公式內容的長度 8,192 個字元」
- Google sheet limits formula calculation to 38 columns, than rises ARRAY_LITERAL error - Google Docs Editors Community 提到「50000 character limit」
留言
張貼留言