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 回复

我会尝试这个方法,谢谢

更多关于Golang正则表达式使用问题求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


您的问题在于正则表达式中的 \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-85 两种格式的值
回到顶部