我从 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?(抱歉,我现在无法访问我的真实示例,因此语法可能不正确)
2 回答
莫回无
TA贡献1865条经验 获得超7个赞
这一切都在包的文档中进行了广泛的解释。
阅读解释的段落:
Regexp 有 16 种方法可以匹配正则表达式并识别匹配的文本。他们的名字由这个正则表达式匹配:
查找(全部)?(字符串)?(子匹配)?(索引)?
在您的情况下,您可能想要使用FindAllStringSubmatch.
在 中Go, astring只是一个只读[]byte。
您可以选择继续传递[]byte变量,
或将[]byte值转换为string:
var byteSlice = []byte{'F','o','o'}
var str string
str = string(byteSlice)
牧羊人nacy
TA贡献1862条经验 获得超7个赞
您可以像使用两个嵌套循环对字符串结果一样简单地遍历字节结果,然后在第二个循环中将字节片段转换为字符串:
package main
import "fmt"
func main() {
f := [][][]byte{{{'a', 'b', 'c'}}}
for _, line := range f {
for _, match := range line { // match is a type of []byte
fmt.Println(string(match))
}
}
}
添加回答
举报
0/150
提交
取消