You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go与Python正则re匹配行为差异及Go对齐Python输出方案问询

差异原因
  • Go的regexp.FindAll系列方法默认返回整个正则表达式的完整匹配结果,不会自动提取捕获组内容。你所用的正则(?:^|_)(.)的完整匹配结果包含非捕获组匹配到的_或者开头定位,因此输出会携带下划线。
  • Python的re.findall在正则包含捕获组时,会优先返回所有捕获组的匹配值,你示例中仅定义了1个捕获组(.),因此直接返回该分组的匹配结果,自动过滤了非捕获组的内容。
解决方案

要拿到和Python一致的捕获组内容,需要使用Go正则的**子匹配(Submatch)**相关方法,示例代码如下:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	re := regexp.MustCompile(`(?:^|_)(.)`)
	matches := re.FindAllSubmatch([]byte("i_love_golang_and_json_so_much"), -1)
	res := make([]string, 0, len(matches))
	for _, match := range matches {
		// match[0]为整个正则的完整匹配内容,match[1]对应第一个捕获组的匹配结果
		res = append(res, string(match[1]))
	}
	fmt.Printf("%q", res)
}

运行上述代码输出结果为:["i" "l" "g" "a" "j" "s" "m"],和Python的输出完全一致。

内容的提问来源于stack exchange,提问作者buxizhizhoum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:54:06