gpt4 book ai didi

regex - 拆分字符串时如何在输出中包含运算符?

转载 作者:IT王子 更新时间:2023-10-29 01:42:40 24 4
gpt4 key购买 nike

昨天我问了this question关于在 python 中拆分字符串。从那以后,我决定用 Go 来做这个项目。我有以下内容:

input := "house-width + 3 - y ^ (5 * house length)"
s := regexp.MustCompile(" ([+-/*^]) ").Split(input, -1)
log.Println(s) // [house-width 3 y (5 house length)]

如何在此输出中包含运算符?例如我想要以下输出:

['house-width', '+', '3', '-', 'y', '^', '(5', '*', 'house length)']

编辑:为澄清起见,我对空格分隔的运算符进行了拆分,而不仅仅是运算符。运算符的两端必须有一个空格,以区别于破折号/连字符。如果需要,请参阅我链接到的原始 python 问题以进行说明。

最佳答案

您可以使用 regexp.Split() 获取表达式的操作数(就像你所做的那样),你可以使用 regexp.FindAllString() 获得运算符(分隔符) .

通过这样做,您将拥有 2 个单独的 []string slice ,如果您希望结果在一个 []string slice 中,您可以合并这 2 个 slice 。

input := "house-width + 3 - y ^ (5 * house length)"

r := regexp.MustCompile(`\s([+\-/*^])\s`)

s1 := r.Split(input, -1)
s2 := r.FindAllString(input, -1)

fmt.Printf("%q\n", s1)
fmt.Printf("%q\n", s2)

all := make([]string, len(s1)+len(s2))
for i := range s1 {
all[i*2] = s1[i]
if i < len(s2) {
all[i*2+1] = s2[i]
}
}
fmt.Printf("%q\n", all)

输出(在 Go Playground 上尝试):

["house-width" "3" "y" "(5" "house length)"]
[" + " " - " " ^ " " * "]
["house-width" " + " "3" " - " "y" " ^ " "(5" " * " "house length)"]

注意:

如果你想从运算符中删除空格,你可以使用 strings.TrimSpace()功能:

for i, v := range s2 {
all[i*2+1] = strings.TrimSpace(v)
}
fmt.Printf("%q\n", all)

输出:

["house-width" "+" "3" "-" "y" "^" "(5" "*" "house length)"]

关于regex - 拆分字符串时如何在输出中包含运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com