为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕神8447489 2021-10-04 09:41:37
我从 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)


查看完整回答
反对 回复 2021-10-04
?
牧羊人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))

        }

    }

}


查看完整回答
反对 回复 2021-10-04
  • 2 回答
  • 0 关注
  • 1266 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信