golang正則之命名分組方式

2022-09-21 17:09:15 字數 2358 閱讀 3192

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

場景還原如下:

有一行文字,格式為:姓名 年齡 郵箱位址

請將其轉換為乙個map

**實現如下:

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 := pdpjqfxzqre.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

}result = append(result, m)

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

fmt.println(string(prettyresult))

輸出為:

[, ,

]使用命名分組可以使正則表示的意義更清晰。

轉換為map更加符程式設計客棧合人類的閱讀習慣,不過比一般的根據索引取分組值麻煩一些。

補充:golang 正則分組匹配多個值

import (

"encoding/json"

"fmt"

"regexp"

)str := `9x_xx:995:88` // `9x_xx:995`

// 使用命名分組,一次匹配多個值

re := regexp.mustcompile(`(?p\w+):+(?p[1-9]*):*(?p[0-9]*)`)

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)

if len(match) == len(groupnames) }}

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

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

本文標題: golang正則之命名分組方式

本文位址:

golang正則之命名分組

正則中有分組這個功能,在golang中也可以使用命名分組。場景還原如下 實現如下 str alice 20 alice gmail.com 使用命名分組,顯得更清晰 re regexp.mustcompile p a za z s p d s p w w w match re.findstrings...

正規表示式中命名分組

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

JS 正則中的命名捕獲分組

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