gpt4 book ai didi

regex - 在 GO 中捕获重复组

转载 作者:IT王子 更新时间:2023-10-29 01:34:31 26 4
gpt4 key购买 nike

我正在尝试创建一个可以解析字符串的函数,该字符串由一个大写单词后跟零个或多个封装在双引号中的参数组成。

例如,以下每一行:

COPY "filename one" "filename two"
REMOVE "filename"
LIST "x" "y" "z"
DISCONNECT

结果应该是一个字符串(命令)后跟一个字符串[](引号内的参数)。我创建了以下正则表达式:

re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")*`)
results := re1.FindAllStringSubmatch(input, -1)

但是,无论我尝试什么,都只会捕获最后一个参数。

我的问题示例:https://play.golang.org/p/W1rE1X4SWf5

"arg1" 未在此示例中捕获。我错过了什么?

最佳答案

如果您的命令定义明确,例如命令名称总是大写的,参数总是在命令之后,那么一个更宽松的正则表达式可能正好适合你的用例:

re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`)
results := re1.FindAllStringSubmatch(`COMMAND "arg1" "arg2" "arg3"`, -1)

fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
fmt.Println("Arg:", arg[2])
}

Playground

关于regex - 在 GO 中捕获重复组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53434310/

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