參考:https://blog.csdn.net/chenxun_2010/article/details/74356719
https://blog.csdn.net/sphinx1122/article/details/86360427
一、獲取golang特定下標中間的字符
字符串在內存中:雙字結構,即一個指向實際數據的指針和記錄字符串長度的整數。
字符串string s = "hello" 和字符串 t = s[2:3] 在內存中的結構如下圖表示:

因為指針對用戶完全不可見,所以我們依舊可以將字符串看成一個值類型,即一個字符數組。
將一個字符串s轉為字節切片: c := []bytes(s)
截取一個字符串str的某部分: substr := str[start:end] (獲取從索引 start 開始到 end-1 位置的子字符串)
str[start:] (獲取從索引 start 開始到 len(str)-1 位置的子字符串)
str[:end] (獲取從索引 0 開始到 end-1 位置的子字符串)
獲取字符串str 的 start 字符的索引:strings.Index(str,start)
一個字符串str 可以直接: str = []s
二、修改字符串中的某個字符
Go 語言中的字符串是不可變的,也就是說 str[index] 這樣的表達式是不可以被放在等號左側的。如果嘗試運行 str[i] = 'D' 會得到錯誤:cannot assign to str[i]。
因此,您必須先將字符串轉換成字節數組,然后再通過修改數組中的元素值來達到修改字符串的目的,最后將字節數組轉換回字符串格式。
例如,將字符串 "hello" 轉換為 "cello":
s := "hello"
c := []byte(s)
c[0] = ’c’
s2 := string(c) // s2 == "cello"
所以,您可以通過操作切片來完成對字符串的操作。
三、正則
//查找連續的小寫字母
reg := regexp.MustCompile(`[a-z]{2,}`)
fmt.Printf("%s\n", reg.FindAllString(text, -1))// [bc ca olang]
查找連續的非小寫字母
reg = regexp.MustCompile(`[^a-z]{2,}`)
fmt.Printf("%s\n",reg.FindAllString(text, -1))//[ MFC 8 . 你好! G]
查找 abc 或 Golang
reg = regexp.MustCompile(`(abc|Golang)`)
fmt.Printf("%s\n", reg.FindAllString(text, -1)) //[Golang]
查找以 G開頭,以 / 結尾的單詞
reg = regexp.MustCompile(`G[\w.]*\/`)
fmt.Printf("%s\n", reg.FindAllString(text, -1)) //[Golang/]
查找從行首開始,以空格結尾的字符串
reg = regexp.MustCompile(`[\w]+\s`)
fmt.Printf("%s\n", reg.FindAllString(text, -1)) //[Abc a7c MFC ]
查找連續 1 次到 4 次的非空格字符,並以 c 結尾的字符串
reg = regexp.MustCompile(`[^\s]{1,4}c`)
fmt.Printf("%s\n", reg.FindAllString(text, -1)) //[Abc a7c 8c]
替換
查找 Abc 或 a7c 或 你好 ,替換為**號
reg = regexp.MustCompile(`(Abc|a7c|你好)`)
fmt.Printf("%s\n", reg.ReplaceAllString(text, "**")) //** ** MFC 8ca. **! Golang/
