Golang RegExp Notes

更新於 發佈於 閱讀時間約 4 分鐘
遙想當年初探 Regular Expression,腦袋紮紮實實地被凌虐了一番,同時十分敬佩把正規表示式寫的簡潔有力又精確無誤的神人。最近學校在上編譯器課程,估計近期內便會接觸到不少 RegExp 的技巧,於是就來寫篇筆記吧~

Regular Expression

我不負責任的猜測,多數正常人一聽到 Regular Expression,反應應該會是
Well~ 不過如果熟練的話其實蠻實用的,雖說網路上已經一大堆人寫了相關東西,但我仍要強迫自己寫一下幫助學習。

字元

  • [12345]:1 or 2 or 3 or 4 or 5
  • [0-9]:數字
  • [a-zA-Z0-9]:數字或大小寫字母
  • b[aeiou]t:bat、bet、bit、bot 或 but
  • [^0-9]:非數字
  • [^\^]:非 ^

字串

  • a:字母 a
  • a.:字母 a 及尾隨一個任意字元
  • ^ak:以 ak 為開頭
  • ka$:以 ka 為結尾

計數

  • a?:零個或一個 a
  • [0-9]+:一個或多個數字
  • [aeiou]*:零個或多個小寫母音字母
  • a{4}:連續四個 a
  • a{4,6}:連續 4~6 個 a
  • a{4,}:連續至少四個 a

特殊字元

  • \b:英文字的邊界,反之則為 \B
  • \d:任一數字,反之則為 \D
  • \w:任一數字或大小寫字幕或底線,反之則為 \W
  • \s:任一空白字元,反之則為 \S
  • \t:定位字元
  • \n:換行符號
好歐一些基本常用的應該都寫上了,如果覺得簡單的話,可以嘗試各種排列組合,設計出些符合生活中某些字串的 regular expression,很快就會感受到這並不是件容易的事了~XD

Golang 中的 regexp 包

Golang 的標準庫十分方便強大,我在熟悉完基本語法後,便開始學習標準庫來提升自己的開發效率和品質。而 Regular Expression 可說是近代語言不可少的標配之一,接著就來筆記一下 Golang 中 regexp 包的一些基本應用,參考自 Go by Example
這個 gist 就是最簡單的 regexp 使用方式,MatchString 可以接受兩個參數,第一個是 pattern,第二個是 string,會嘗試在 string 中匹配 pattern,並回傳一個 (bool, error) 結構,分別是是否匹配成功及發生的錯誤。
但其實可以先把 regexp 給 compile 起來方便後續使用,畢竟單純的字串是無法進行匹配工作的,仍要做些處理才能實現匹配功能,但這種 compile 的工作做一次就夠了,做太多次只是浪費資源。
Compile 會回傳一個 (*Regexp, error),分別是 Regexp 結構和編譯時的錯誤。接著我們可以對產出的 Regexp 結構呼叫其函數。
其中 MatchString 和 FindString 各自會回傳是否匹配成功及第一個匹配成功的字串,FindStringSubmatch 可回傳第一個符合整體表達式及其中滿足規則並未寫死的 字串的 slice。FindAllString 則會會傳多個匹配成功字串的 slice,第二個參數可指定數量,若為 -1 則全部回傳。
我們也可以針對 Index 方面取得更進一步的資訊。
FindStringIndex 可以回傳第一個符合整體表達式的字串的 Index 範圍,FindStringSubmatchIndex 則會再多回傳其中滿足規則並未寫死的部分的 Index 範圍。FindAllStringSubmatchIndex 則是回傳多個 Index 範圍,同樣可以藉由第二個參數指定回傳數量。
同時也可以針對匹配到的字串執行函數,這裡需要再引入 “bytes”包。
如此ㄧ來我們便能透過 bytes.ToUpper 把所有匹配成功的字串轉成大寫字母。

這次就先寫到這裡吧,Regular Expression 是門博大精深的學問,至少我是這麼覺得啦~更多詳細技巧可以參考 Document
avatar-img
4會員
8內容數
一個初入 Golang 世界的菜鳥,希望能透過筆記的方式幫助自己釐清問題。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
題目敘述 Minimum Deletions to Make String Balanced 給定一個只會有包含'a'b或'b'的輸入字串s。 每次操作可以任選一個字元刪除。 請問最少需要多少次操作,才會使得所有的'b'都在'a'後面? 測試範例 Example 1: Input: s
Thumbnail
題目敘述 Distinct Subsequences 給定一個字串s和目標t,請問有多少個s的子序列可以完美匹配目標t ? 也就是說,有多少個s的子序列和目標t相等? 測試範例 Input: s = "rabbbit", t = "rabbit" Output: 3
Thumbnail
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
在 Google 試算表中,LEFT、MID、RIGHT 函式都是用來擷取文字字串中特定部分的函式。我想在這次的教學簡單介紹一下它們,歡迎來看看! LEFT:從左邊(開頭)取字串 我們可以用 LEFT 函式從字串的左邊(開頭)取指定字數的字串。 語法 =LEFT(字串, 要取的
Thumbnail
接下來喜特先生會介紹一系列關於文字處理時,會常常運用到的函式。我們這次先從比較簡單的 LEN、CHAR 和 REPT 開始,之後會陸續介紹其他的。如果你有什麼想要了解的函式,歡迎在下面留言告訴我! LEN:字元長度 我們可以用 LEN 函式取得儲存格或字元的長度。 語法相當簡單:
※ 常用Object(物件)型態的方法: 拿到object裡面某個key的value(值): 拿到所有屬性: ※ 存取物件屬性:點記法與括號記法 使用點記法 (dot notation) 或括號記法 (bracket notation) 來存取物件的值,以下兩種寫法的結果是一樣的: //
Thumbnail
語法: grep '^<starting-character>.*<ending-character>$' <file> grep 指令可以使用特殊字元的組合: 星號 ( * )、( $ ) 和 ( ^ )來過濾搜尋的內容。在我們的範例中,要使用 grep搜尋以特定字元開頭和結尾的內容,例如
Thumbnail
題目敘述 題目會給定一個輸入字串s和一套編碼規則,要求我們針對字串s進行解碼,並且以字串的形式返回答案。 編碼規則: 數字[字串] -> []內的字串以對應倍數做展開,而且允許巢狀編碼。 例如: 3[a] 解碼完就是 aaa 2[bc] 解碼完就是 bcbc 2[a2[b]] = 2
Thumbnail
題目敘述 題目會給我們兩個字串作為輸入,分別是字串s和字串t,問我最少要做幾次字元轉換,讓字串t和字串s成為Anagram"同字母異序詞"? 註: 例如 god 和 dog 就是 Anagram 同字母異序詞,也是就說,組成字母相同,但是順序可以重新排列。 題目的原文敘述 測試範例 Ex
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
題目敘述 Minimum Deletions to Make String Balanced 給定一個只會有包含'a'b或'b'的輸入字串s。 每次操作可以任選一個字元刪除。 請問最少需要多少次操作,才會使得所有的'b'都在'a'後面? 測試範例 Example 1: Input: s
Thumbnail
題目敘述 Distinct Subsequences 給定一個字串s和目標t,請問有多少個s的子序列可以完美匹配目標t ? 也就是說,有多少個s的子序列和目標t相等? 測試範例 Input: s = "rabbbit", t = "rabbit" Output: 3
Thumbnail
這是文字處理基礎函式的第四篇文章,今天要來介紹 REPLACE 函式! REPLACE 可以取代掉儲存格內的文字,今天會分享一下它語法怎麼寫、也有兩個實際應用的案例。一起來看看! REPLACE 語法 REPLACE 的語法長了一點點,有四個參數要設定: =REPLACE(要取代
Thumbnail
在 Google 試算表中,LEFT、MID、RIGHT 函式都是用來擷取文字字串中特定部分的函式。我想在這次的教學簡單介紹一下它們,歡迎來看看! LEFT:從左邊(開頭)取字串 我們可以用 LEFT 函式從字串的左邊(開頭)取指定字數的字串。 語法 =LEFT(字串, 要取的
Thumbnail
接下來喜特先生會介紹一系列關於文字處理時,會常常運用到的函式。我們這次先從比較簡單的 LEN、CHAR 和 REPT 開始,之後會陸續介紹其他的。如果你有什麼想要了解的函式,歡迎在下面留言告訴我! LEN:字元長度 我們可以用 LEN 函式取得儲存格或字元的長度。 語法相當簡單:
※ 常用Object(物件)型態的方法: 拿到object裡面某個key的value(值): 拿到所有屬性: ※ 存取物件屬性:點記法與括號記法 使用點記法 (dot notation) 或括號記法 (bracket notation) 來存取物件的值,以下兩種寫法的結果是一樣的: //
Thumbnail
語法: grep '^<starting-character>.*<ending-character>$' <file> grep 指令可以使用特殊字元的組合: 星號 ( * )、( $ ) 和 ( ^ )來過濾搜尋的內容。在我們的範例中,要使用 grep搜尋以特定字元開頭和結尾的內容,例如
Thumbnail
題目敘述 題目會給定一個輸入字串s和一套編碼規則,要求我們針對字串s進行解碼,並且以字串的形式返回答案。 編碼規則: 數字[字串] -> []內的字串以對應倍數做展開,而且允許巢狀編碼。 例如: 3[a] 解碼完就是 aaa 2[bc] 解碼完就是 bcbc 2[a2[b]] = 2
Thumbnail
題目敘述 題目會給我們兩個字串作為輸入,分別是字串s和字串t,問我最少要做幾次字元轉換,讓字串t和字串s成為Anagram"同字母異序詞"? 註: 例如 god 和 dog 就是 Anagram 同字母異序詞,也是就說,組成字母相同,但是順序可以重新排列。 題目的原文敘述 測試範例 Ex