String 沿正则表达式拆分字符串,但保留匹配项
我想在常规表达式上拆分字符串,但保留匹配项 我曾尝试在正则表达式上拆分字符串,但它会丢弃匹配项。我也尝试过使用,但我不太擅长将代码从一种语言翻译成另一种语言,更不用说CString 沿正则表达式拆分字符串,但保留匹配项,string,go,split,String,Go,Split,我想在常规表达式上拆分字符串,但保留匹配项 我曾尝试在正则表达式上拆分字符串,但它会丢弃匹配项。我也尝试过使用,但我不太擅长将代码从一种语言翻译成另一种语言,更不用说C re:=regexp.MustCompile(`\d`) 数组:=重新拆分(“ab1cd2ef3”,-1) 我需要数组的值为[“ab”、“1”、“cd”、“2”、“ef”、“3”],但数组的值为[“ab”、“cd”、“ef”]。没有错误。我认为这在当前的regexp包中是不可能的,但是拆分可以很容易地扩展到这种行为 这应该适用
re:=regexp.MustCompile(`\d`)
数组:=重新拆分(“ab1cd2ef3”,-1)
我需要数组的值为[“ab”、“1”、“cd”、“2”、“ef”、“3”],但数组的值为[“ab”、“cd”、“ef”]。没有错误。我认为这在当前的regexp包中是不可能的,但是
拆分可以很容易地扩展到这种行为
这应该适用于您的情况:
func Split(re *regexp.Regexp, s string, n int) []string {
if n == 0 {
return nil
}
matches := re.FindAllStringIndex(s, n)
strings := make([]string, 0, len(matches))
beg := 0
end := 0
for _, match := range matches {
if n > 0 && len(strings) >= n-1 {
break
}
end = match[0]
if match[1] != 0 {
strings = append(strings, s[beg:end])
}
beg = match[1]
// This also appends the current match
strings = append(strings, s[match[0]:match[1]])
}
if end != len(s) {
strings = append(strings, s[beg:])
}
return strings
}
愚蠢的解决方案。在字符串中添加分隔符并使用分隔符拆分
package main
import (
"fmt"
"regexp"
"strings"
)
func main() {
re := regexp.MustCompile(`\d+`)
input := "ab1cd2ef3"
sep := "|"
indexes := re.FindAllStringIndex(input, -1)
fmt.Println(indexes)
move := 0
for _, v := range indexes {
p1 := v[0] + move
p2 := v[1] + move
input = input[:p1] + sep + input[p1:p2] + sep + input[p2:]
move += 2
}
result := strings.Split(input, sep)
fmt.Println(result)
}
您指出的链接中的regex支持类型在Go regex包中不可用。你可以看报纸
您想要实现的(根据给定的示例)可以使用正则表达式匹配数字或非数字
package main
import (
"fmt"
"regexp"
)
func main() {
str := "ab1cd2ef3"
r := regexp.MustCompile(`(\d|[^\d]+)`)
fmt.Println(r.FindAllStringSubmatch(str, -1))
}
游乐场:
输出:
[[ab ab] [1 1] [cd cd] [2 2] [ef ef] [3 3]]
我可以对多个分离器执行相同的操作吗?看来我不行<代码>(\(\)\[^\(\)]+)
匹配令牌只需正则表达式。因此,只要您可以使用regex单独表示令牌,就可以有多个令牌由
分隔。如果您可以提供一些示例字符串,它将更容易理解。