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
31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
KH Huang的沙龍 的其他內容
探索 Golang 正則表達式的進階技巧。理解貪婪和非貪婪匹配,運用惰性限定符優化效能,深入分組和非捕獲分組,並優化正則表達式的性能。
利用 Goroutines 實現 Observer Pattern。
探索 Golang 正則表達式的進階技巧。理解貪婪和非貪婪匹配,運用惰性限定符優化效能,深入分組和非捕獲分組,並優化正則表達式的性能。
利用 Goroutines 實現 Observer Pattern。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
接著介紹可以尋找文字的函式:FIND 跟 SEARCH。這兩個函式都會回傳指定文字第一次出現的位置,而這位置會以數字表示。
Thumbnail
在 Google 試算表中,LEFT、MID、RIGHT 函式都是用來擷取文字字串中特定部分的函式。我想在這次的教學簡單介紹一下它們,歡迎來看看! LEFT:從左邊(開頭)取字串 我們可以用 LEFT 函式從字串的左邊(開頭)取指定字數的字串。 語法 =LEFT(字串, 要取的
Thumbnail
接下來喜特先生會介紹一系列關於文字處理時,會常常運用到的函式。我們這次先從比較簡單的 LEN、CHAR 和 REPT 開始,之後會陸續介紹其他的。如果你有什麼想要了解的函式,歡迎在下面留言告訴我! LEN:字元長度 我們可以用 LEN 函式取得儲存格或字元的長度。 語法相當簡單:
Thumbnail
演算法映射化簡的核心觀念 在面對新題目的時候,除了重頭想一個新的演算法之外; 還有另一個方法,想看看有沒有核心觀念彼此相同的問題與演算法, 如果有,就可以把新的題目映射化簡到已知解法的問題,用已知的演算法去解開。 接著,我們會介紹幾個範例,並且使用映射化簡的技巧來解題,透過化
Thumbnail
題目敘述 題目會給我們一個字串s。 要求我們移除字串中的星號,還有刪除星號左手邊最靠近的第一個字元。 以字串的形式返回輸出答案。 題目的原文敘述 測試範例 Example 1: Input: s = "leet**cod*e" Output: "lecoe" Explanation:
Thumbnail
題目敘述 題目會給定我們兩個字串word1 和 word2。 允許我們不限制次數進行下列兩種操作: 任意調換其中兩個字元的位置。 把字串中的某個字元全部置換成另一個字元,同時把另一個字元同時置換成某個字元。(例如把字串中原本的a都換成b,把原本的b都換成a) 問我們能不能通過上述兩項操作,
Thumbnail
題目敘述 題目會給我們兩個字串作為輸入,分別是字串s和字串t,問我最少要做幾次字元轉換,讓字串t和字串s成為Anagram"同字母異序詞"? 註: 例如 god 和 dog 就是 Anagram 同字母異序詞,也是就說,組成字母相同,但是順序可以重新排列。 題目的原文敘述 測試範例 Ex
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
Thumbnail
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
接著介紹可以尋找文字的函式:FIND 跟 SEARCH。這兩個函式都會回傳指定文字第一次出現的位置,而這位置會以數字表示。
Thumbnail
在 Google 試算表中,LEFT、MID、RIGHT 函式都是用來擷取文字字串中特定部分的函式。我想在這次的教學簡單介紹一下它們,歡迎來看看! LEFT:從左邊(開頭)取字串 我們可以用 LEFT 函式從字串的左邊(開頭)取指定字數的字串。 語法 =LEFT(字串, 要取的
Thumbnail
接下來喜特先生會介紹一系列關於文字處理時,會常常運用到的函式。我們這次先從比較簡單的 LEN、CHAR 和 REPT 開始,之後會陸續介紹其他的。如果你有什麼想要了解的函式,歡迎在下面留言告訴我! LEN:字元長度 我們可以用 LEN 函式取得儲存格或字元的長度。 語法相當簡單:
Thumbnail
演算法映射化簡的核心觀念 在面對新題目的時候,除了重頭想一個新的演算法之外; 還有另一個方法,想看看有沒有核心觀念彼此相同的問題與演算法, 如果有,就可以把新的題目映射化簡到已知解法的問題,用已知的演算法去解開。 接著,我們會介紹幾個範例,並且使用映射化簡的技巧來解題,透過化
Thumbnail
題目敘述 題目會給我們一個字串s。 要求我們移除字串中的星號,還有刪除星號左手邊最靠近的第一個字元。 以字串的形式返回輸出答案。 題目的原文敘述 測試範例 Example 1: Input: s = "leet**cod*e" Output: "lecoe" Explanation:
Thumbnail
題目敘述 題目會給定我們兩個字串word1 和 word2。 允許我們不限制次數進行下列兩種操作: 任意調換其中兩個字元的位置。 把字串中的某個字元全部置換成另一個字元,同時把另一個字元同時置換成某個字元。(例如把字串中原本的a都換成b,把原本的b都換成a) 問我們能不能通過上述兩項操作,
Thumbnail
題目敘述 題目會給我們兩個字串作為輸入,分別是字串s和字串t,問我最少要做幾次字元轉換,讓字串t和字串s成為Anagram"同字母異序詞"? 註: 例如 god 和 dog 就是 Anagram 同字母異序詞,也是就說,組成字母相同,但是順序可以重新排列。 題目的原文敘述 測試範例 Ex