Golang正则表达式使用问题求助
Golang正则表达式使用问题求助 大家好,请帮忙
我有文本:
content := `
text0{%text,5-8%}text1{%text,5%}text2
`
和正则表达式
pattern := regexp.MustCompile(`(?m)\{%(?P<key>\w+).(?P<value>\w+)%\}`)
如何用一个正则表达式同时匹配 {%text,5%} 和 {%text,5-8%}? 在我的示例中只能匹配到 {%text,5%}
2 回复
您的问题在于正则表达式中的 \w+ 只能匹配字母数字字符,而 5-8 包含连字符 -,所以无法匹配到 {%text,5-8%}。
修改正则表达式,将 (?P<value>\w+) 改为 (?P<value>[^%]+),这样就能匹配除了 % 之外的任意字符,包括数字和连字符:
package main
import (
"fmt"
"regexp"
)
func main() {
content := `
text0{%text,5-8%}text1{%text,5%}text2
`
pattern := regexp.MustCompile(`(?m)\{%(?P<key>\w+),(?P<value>[^%]+)%\}`)
matches := pattern.FindAllStringSubmatch(content, -1)
for _, match := range matches {
fmt.Printf("完整匹配: %s\n", match[0])
fmt.Printf("key: %s\n", match[1])
fmt.Printf("value: %s\n", match[2])
fmt.Println("---")
}
}
输出结果:
完整匹配: {%text,5-8%}
key: text
value: 5-8
---
完整匹配: {%text,5%}
key: text
value: 5
---
关键修改:
(?P<value>\w+)→(?P<value>[^%]+)[^%]+表示匹配一个或多个非%字符- 这样就能正确匹配
5-8和5两种格式的值

