处理遵循特定模式的字符串时,捕获重复组可能是一项常见任务。在 Go 中,正则表达式是实现此目的的强大工具。
考虑以下问题:解析由大写单词后跟零个或多个用双引号引起来的参数组成的字符串。目标是提取命令(大写单词)和参数(带引号的字符串)。
一个常见的错误是使用正则表达式,例如:
re1, _ := regexp.Compile(`([A-Z] )(?: "([^"] )")*`)
此正则表达式仅捕获字符串中的最后一个参数。修改表达式以允许捕获多组参数:
re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)
现在,要提取命令和参数,请使用 FindAllStringSubmatch 函数以及经过适当修改的正则表达式:
results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)
此正则表达式捕获组为:
最后,迭代覆盖结果并将命令与参数分开:
fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
fmt.Println("Arg:", arg[2])
}
通过解决正则表达式的缺点,您可以有效地捕获 Go 代码中的重复组。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3