Golang 正则表达式:FindAllStringSubmatch 到 []string

我从 Amazon S3 下载了一个多行文件,格式如下:


ColumnAv1 ColumnBv1 ColumnCv1 ...

ColumnAv2 ColumnBv2 ColumnCv2 ...

该文件是字节类型。然后我想用正则表达式解析它:


matches := re.FindAllSubmatch(file,-1)

然后我想将结果逐行提供给[]string作为输入的函数(string[0]is ColumnAv1,string[1]is ColumnBv2, ...)。


我应该如何将结果转换[][][]byte为[]string包含第一、第二等行?我想我应该循环执行,但我无法使其正常工作:


for i:=0;i<len(len(matches);i++{

    tmp:=myfunction(???)

}

顺便说一句,为什么函数FindAllSubmatch返回[][][]byte而FindAllStringSubmatch返回[][]string?


(抱歉,我现在无法访问我的真实示例,因此语法可能不正确)


慕神8447489
浏览 1277回答 2
2回答

莫回无

这一切都在包的文档中进行了广泛的解释。阅读解释的段落:Regexp 有 16 种方法可以匹配正则表达式并识别匹配的文本。他们的名字由这个正则表达式匹配:查找(全部)?(字符串)?(子匹配)?(索引)?在您的情况下,您可能想要使用FindAllStringSubmatch.在 中Go, astring只是一个只读[]byte。您可以选择继续传递[]byte变量,或将[]byte值转换为string:var byteSlice = []byte{'F','o','o'}var str stringstr = string(byteSlice)

牧羊人nacy

您可以像使用两个嵌套循环对字符串结果一样简单地遍历字节结果,然后在第二个循环中将字节片段转换为字符串:package mainimport "fmt"func main() {&nbsp; &nbsp; f := [][][]byte{{{'a', 'b', 'c'}}}&nbsp; &nbsp; for _, line := range f {&nbsp; &nbsp; &nbsp; &nbsp; for _, match := range line { // match is a type of []byte&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(string(match))&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript