如何匹配除"&&"外的任意字符?Go语言RE2正则方案求助
在Go里用RE2正则按连续"&&"分割字符串的正确姿势
嘿,我来帮你搞定这个问题!你遇到的坑其实是RE2和PCRE正则特性的差异——毕竟Go的regexp包完全基于RE2,不支持PCRE里的一些高级语法(比如可变长度的lookbehind)。下面给你两种实用的解决方案,适配不同的需求:
方案1:精准按"&&"分割(单个&保留)
如果你的需求是只在恰好两个连续&的位置分割(比如"&&&"会被拆出一个空字符串),直接用&&作为正则表达式就够了,简单高效:
package main import ( "fmt" "regexp" ) func main() { targetStr := "测试&&字符串&保留单个&&&分割" splitter := regexp.MustCompile(`&&`) result := splitter.Split(targetStr, -1) fmt.Println(result) // 输出: [测试 字符串&保留单个 &分割] }
方案2:把任意多个连续&(≥2)当成一个分隔符
如果不想出现空字符串(比如把"&&&"也当成一个分隔符),就用&{2,}这个正则,它会匹配两个及以上的连续&:
package main import ( "fmt" "regexp" ) func main() { targetStr := "测试&&字符串&保留单个&&&分割" splitter := regexp.MustCompile(`&{2,}`) result := splitter.Split(targetStr, -1) fmt.Println(result) // 输出: [测试 字符串&保留单个 分割] }
为啥之前的尝试会踩坑?
你说之前的正则要么匹配单个&,要么匹配不到,大概率是这两种情况:
- 直接用了
&作为分隔符,自然会把所有单个&都拆分; - 照搬了PCRE的写法(比如用了可变长度的lookbehind),但RE2不支持这类语法,导致正则失效。
上面的两种方案都是纯RE2兼容的,完全适配Go的正则包,放心用就行~
内容的提问来源于stack exchange,提问作者user_78361084
相关产品推荐
相关产品推荐

