本文目錄一覽:
在golang中,搜索關鍵字,里怎麼使用(名字/賬號/手機號)
這和用不用golang沒有關係,給你個提示
先用正則判斷關鍵字是否為手機號,不是進行下一步
判斷關鍵字是否符合帳號規則
最後進行名字匹配
golang正則表達式 分組命名
正則中有分組這個功能,在golang中也可以使用命名分組。
一次匹配的情況
場景還原如下:
有一行文本,格式為:姓名 年齡 郵箱地址
請將其轉換為一個map
代碼實現如下:
str := `Alice 20 alice@gmail.com`
// 使用命名分組,顯得更清晰
re := regexp.MustCompile(`(?Pname[a-zA-Z]+)\s+(?Page\d+)\s+(?Pemail\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 {
if i != 0 name != “” { // 第一個分組為空(也就是整個匹配)
result[name] = match[i]
}
}
prettyResult, _ := json.MarshalIndent(result, “”, ” “)
fmt.Printf(“%s\n”, prettyResult)
輸出為:
[Alice 20 alice@gmail.com Alice 20 alice@gmail.com], [ name age email], 4, 4
{
“age”: “20”,
“email”: “alice@gmail.com”,
“name”: “Alice”
}
注意 [ name age email]有4個元素, 第一個為””。
多次匹配的情況
接上面的例子,實現一個更貼近現實的需求:
有一個文件, 內容大致如下:
Alice 20 alice@gmail.com
Bob 25 bob@outlook.com
gerrylon 26 gerrylon@github.com
…
更多內容
和上面一樣, 不過這次轉出來是一個slice of map, 也就是多個map。
代碼如下:
// 文件內容直接用字符串表示
usersStr := `
Alice 20 alice@gmail.com
Bob 25 bob@outlook.com
gerrylon 26 gerrylon@github.com
`
userRe := regexp.MustCompile(`(?Pname[a-zA-Z]+)\s+(?Page\d+)\s+(?Pemail\w+@\w+(?:\.\w+)+)`)
// 這裡要用FindAllStringSubmatch,找到所有的匹配
users := userRe.FindAllStringSubmatch(usersStr, -1)
groupNames := userRe.SubexpNames()
var result []map[string]string // slice of map
// 循環所有行
for _, user := range users {
m := make(map[string]string)
// 對每一行生成一個map
for j, name := range groupNames {
if j != 0 name != “” {
m[name] = strings.TrimSpace(user[j])
}
}
result = append(result, m)
}
prettyResult, _ := json.MarshalIndent(result, “”, ” “)
fmt.Println(string(prettyResult))
輸出為:
[
{
“age”: “20”,
“email”: “alice@gmail.com”,
“name”: “Alice”
},
{
“age”: “25”,
“email”: “bob@outlook.com”,
“name”: “Bob”
},
{
“age”: “26”,
“email”: “gerrylon@github.com”,
“name”: “gerrylon”
}
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
總結
使用命名分組可以使正則表示的意義更清晰。
轉換為map更加符合人類的閱讀習慣,不過比一般的根據索引取分組值麻煩一些。
————————————————
版權聲明:本文為CSDN博主「butterfly5211314」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:
golang 正則 regexp包使用
先介紹幾種常用的方法:
1、使用MatchString函數或Match函數
regexp.MatchString(pattern string, s string) pattern為正則表達式,s為需要校驗的字符串
regexp.Match(pattern string, b []byte) pattern為正則表達式,s為需要校驗的字符串
它們的作用都是匹配,區別在於參數為字符串和切片
實例如下:
2、使用 Compile函數或MustCompile函數
它們的區別是Compile返回兩個參數 Regexp,error類型,而MustCompile只返回 Regexp類型
它們的作用是將正則表達式進行編譯,返回優化的 Regexp 結構體,該結構體有需多方法。
實例如下:
3、查找正則匹配字串( 註:函數名包含string的所傳參數為string 其他的均為[]byte 帶All是所有)
查找正則匹配的字符串位置( 註:函數名包含string的所傳參數為string 其他的均為[]byte 帶All是所有)
4、替換
正則替換
按原文替換
函數處理替換源字串
5、Regexp結構體中一些常用的方法
原創文章,作者:XLIC,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/134236.html