Golang 正則進階篇 (二):實際應用

更新於 發佈於 閱讀時間約 6 分鐘

歡迎來到本系列的第二篇文章!在上一篇

Golang 正則進階篇 (一):正則語法加強版

我們已經深入了解了正則表達式的一些高級技巧。現在,我們將把這些技巧應用到實際的文本處理任務中,讓我們開始吧!

正則表達式替換

正則表達式不僅可以用來匹配文本,還可以用來進行替換。Golang 提供了 Regexp.ReplaceAll 函數來實現這一功能。

案例:

假設你有一個包含單詞的句子,你想將其中的元音字母替換為星號。我們可以使用正則表達式來實現這一需求。
package main

import (
"fmt"
"regexp"
)

func main() {
re := regexp.MustCompile(`[aeiou]`)
result := re.ReplaceAllString("Hello World", "*")
fmt.Println(result)
}

// 輸出:H*ll* W*rld


正則表達式在 URL 解析中的應用

正則表達式在處理 URL 時也非常有用。讓我們看一個實際的應用案例,如何從 URL 中提取不同的部分。

案例:

假設你需要從 URL 中提取協議、主機和路徑等部分。我們可以使用正則表達式來解析 URL。
package main

import (
"fmt"
"regexp"
)

func main() {
url := "https://www.example.com/path/to/resource"
re := regexp.MustCompile(`^(https?)://([^/]+)(/[^?]+)`)
match := re.FindStringSubmatch(url)
if len(match) >= 4 {
protocol := match[1]
host := match[2]
path := match[3]
fmt.Printf("Protocol: %s\nHost: %s\nPath: %s\n", protocol, host, path)
}
}

// 輸出:
// Protocol: https
// Host: www.example.com
// Path: /path/to/resource


使用 SubexpNames 獲取命名分組

Go的regexp庫允許你使用命名分組來捕獲正則表達式的匹配結果,這可以使你的代碼更具可讀性。

案例:

假設你需要從日期字符串中提取年、月和日。我們可以使用命名分組來捕獲這些信息。
package main

import (
"fmt"
"regexp"
)

func main() {
pattern := `(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})`
re := regexp.MustCompile(pattern)
match := re.FindStringSubmatch("2023-08-20")

names := re.SubexpNames()
for i, name := range names {
if i != 0 && name != "" {
fmt.Printf("%s: %s\n", name, match[i])
}
}
}

// 輸出:
// year: 2023
// month: 08
// day: 20


使用 ReplaceAllStringFunc

除了基本的替換功能,Go還提供了一個非常靈活的方法來進行基於正則匹配的替換。

案例:

假設你有一段文本,你想將其中的單詞轉換為大寫。我們可以使用 ReplaceAllStringFunc 來實現這一需求。
package main

import (
"fmt"
"regexp"
"strings"
)

func main() {
re := regexp.MustCompile(`[a-z]+`)
sentence := "hello world"
result := re.ReplaceAllStringFunc(sentence, strings.ToUpper)
fmt.Println(result)
}

// 輸出:HELLO WORLD


進階匹配技巧:字節切片匹配

Go的 regexp 庫也允許使用字節切片進行匹配,這是一個相對進階的技巧,尤其在處理 二進制數據大型數據 時非常有用。

案例:

假設你有一段文本,你想從中提取出所有的 "Go"。我們可以使用字節切片進行匹配。
package main

import (
"fmt"
"regexp"
)

func main() {
re := regexp.MustCompile(`Go`)
data := []byte("I love Go and Golang!")
matches := re.FindAll(data, -1)
for _, match := range matches {
fmt.Println(string(match))
}
}

// 輸出:
// Go
// Go


小結

在本篇文章中,我們進一步探討了正則表達式的實際應用,包括命名分組、使用 ReplaceAllStringFunc 進行替換,以及使用字節切片進行匹配。這些進階技巧能夠讓你更靈活地處理各種文本數據處理任務。通過本文的內容,你已經掌握了更多正則表達式的應用場景,並可以更自信地在實際項目中運用它們。在下一篇

Golang 正則進階篇 (三):通過 Golang 正則表達式優化代碼效能 文章中

我們將探討更高級的主題,如如何通過 Golang 正則表達式來優化代碼效能。敬請期待!

留言
avatar-img
留言分享你的想法!
KH Huang-avatar-img
發文者
2023/08/22
Golang 正則進階篇 (一):正則語法加強版提及了這篇文章,趕快過去看看吧!
avatar-img
KH Huang的沙龍
36會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
KH Huang的沙龍的其他內容
2023/08/22
精通 Golang 正則表達式的代碼優化。透過高效的字符串處理、動態模式生成和編譯,以及處理複雜文本匹配,將正則表達式融入你的代碼中,提升效能。
Thumbnail
2023/08/22
精通 Golang 正則表達式的代碼優化。透過高效的字符串處理、動態模式生成和編譯,以及處理複雜文本匹配,將正則表達式融入你的代碼中,提升效能。
Thumbnail
2023/08/22
探索 Golang 正則表達式的進階技巧。理解貪婪和非貪婪匹配,運用惰性限定符優化效能,深入分組和非捕獲分組,並優化正則表達式的性能。
Thumbnail
2023/08/22
探索 Golang 正則表達式的進階技巧。理解貪婪和非貪婪匹配,運用惰性限定符優化效能,深入分組和非捕獲分組,並優化正則表達式的性能。
Thumbnail
2023/08/21
用 Golang 玩玩正則表達式
Thumbnail
2023/08/21
用 Golang 玩玩正則表達式
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
Apps Script 的 Google Translate Service 可以幫你自動翻譯文本,是個還不錯的翻譯方案。來一起看看我的觀點!
Thumbnail
Apps Script 的 Google Translate Service 可以幫你自動翻譯文本,是個還不錯的翻譯方案。來一起看看我的觀點!
Thumbnail
👨‍💻 簡介 在處理string時,正則表達式是一個非常有用的工具。Go語言的regexp package 可以使用正則表達式,用來執行如檢查string是否匹配某個模式、提取匹配的subString等操作。
Thumbnail
👨‍💻 簡介 在處理string時,正則表達式是一個非常有用的工具。Go語言的regexp package 可以使用正則表達式,用來執行如檢查string是否匹配某個模式、提取匹配的subString等操作。
Thumbnail
👨‍💻 簡介 一開始介紹基本資料型別時有稍微提到一點string的處理,今天介紹string的一些操作,像是檢查的功能、修改的功能、比較的功能等等。
Thumbnail
👨‍💻 簡介 一開始介紹基本資料型別時有稍微提到一點string的處理,今天介紹string的一些操作,像是檢查的功能、修改的功能、比較的功能等等。
Thumbnail
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
Thumbnail
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
Thumbnail
運用 Golang 正則表達式處理文本。從替換操作到 URL 解析,再到日誌分析,掌握實際應用場景下的正則技巧,提取、轉換和分析文本數據。
Thumbnail
運用 Golang 正則表達式處理文本。從替換操作到 URL 解析,再到日誌分析,掌握實際應用場景下的正則技巧,提取、轉換和分析文本數據。
Thumbnail
👨‍💻簡介 在這篇文章裡,會簡單介紹幾個關鍵的基本概念和語法結構,加快上手這門程式語言。
Thumbnail
👨‍💻簡介 在這篇文章裡,會簡單介紹幾個關鍵的基本概念和語法結構,加快上手這門程式語言。
Thumbnail
在其他語言會時常使用正規表達式來幫字串進行 Filter,在遊戲製作裡面比較遇不到處理使用者的字串輸入、資料庫查詢結果的情況,但在編輯程式碼,有搜尋(Ctrl+F)、取代(Ctrl+H)需求時使用 Regex 也能提升工作效率。
Thumbnail
在其他語言會時常使用正規表達式來幫字串進行 Filter,在遊戲製作裡面比較遇不到處理使用者的字串輸入、資料庫查詢結果的情況,但在編輯程式碼,有搜尋(Ctrl+F)、取代(Ctrl+H)需求時使用 Regex 也能提升工作效率。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News