golang正則之命名分組

2021-08-27 14:13:55 字數 1707 閱讀 4770

正則中有分組這個功能,在golang中也可以使用命名分組。

場景還原如下:

**實現如下:

str := `alice 20 [email protected]`

// 使用命名分組,顯得更清晰

re := regexp.mustcompile(`(?p[a-za-z]+)\s+(?p\d+)\s+(?p\w+@\w+(?:\.\w+)+)`)

match := re.findstringsubmatch(str)

groupnames := re.subexpnames()

fmt.printf("%v, %v, %d, %d\n", match, groupnames, len(match), len(groupnames))

result := make(map[string]string)

// 轉換為map

for i, name := range groupnames

}prettyresult, _ := json.marshalindent(result, "", " ")

fmt.printf("%s\n", prettyresult)

輸出為:

[alice 20 [email protected] alice 20 [email protected]], [ name age email], 4, 4

注意[ name age email]有4個元素, 第乙個為""

接上面的例子,實現乙個更貼近現實的需求:

有乙個檔案, 內容大致如下:

alice 20 [email protected]

bob 25 [email protected]

gerrylon 26 [email protected]

...

和上面一樣, 不過這次轉出來是乙個slice of map, 也就是多個map。

**如下:

// 檔案內容直接用字串表示

usersstr := `

alice 20 [email protected]

bob 25 [email protected]

gerrylon 26 [email protected]

`userre := regexp.mustcompile(`(?p[a-za-z]+)\s+(?p\d+)\s+(?p\w+@\w+(?:\.\w+)+)`)

// 這裡要用findallstringsubmatch,找到所有的匹配

users := userre.findallstringsubmatch(usersstr,-1)

groupnames := userre.subexpnames()

var result map[string]string

// slice of map

// 迴圈所有行

for _, user := range users

}}prettyresult, _ := json.marshalindent(result, "", " ")

fmt.println(string(prettyresult))

輸出為:

[

, ,

]

參考:

歡迎補充指正!

golang正則之命名分組方式

正則中有分組這個功能,在golang中也可以使用命名分組。場景還原如下 有一行文字,格式為 姓名 年齡 郵箱位址 請將其轉換為乙個map 實現如下 str alice 20 alice gmail.com 使用命名分組,顯得更清晰 re regexp.mustcompile p a za z s p...

正規表示式中命名分組

命名分組 與普通分組一樣的功能,並且將匹配的子字串捕獲到乙個組名稱或編號名稱中。在獲得匹配結果時,可通過分組名進行獲取。說明命名捕獲根據左括號的從左到右的順序按順序編號 與非命名捕獲類似 但在對所有非命名捕獲進行計數之後才開始對命名捕獲進行編號。deelx 允許多個命名分組的名字相同,這時它們捕獲到...

JS 正則中的命名捕獲分組

假設你在一段陌生的 中看到這樣乙個函式 function tolocaldate date d d 2 1 3 單看這個函式你能知道它是想把 日 月 年 替換成 月 日 年 還是反過來?匿名捕獲分組沒法做到這一點,那就該命名捕獲分組上場了 function tolocaldate date d d ...