Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何丢弃列表中带有特定字符串的行并输出到新列表_Go - Fatal编程技术网

Go 如何丢弃列表中带有特定字符串的行并输出到新列表

Go 如何丢弃列表中带有特定字符串的行并输出到新列表,go,Go,我从一个网站上下载了一个XML列表。我试图通过丢弃包含某个字符串的行,并在不包含该字符串的行的情况下构建相同类型的列表来过滤列表。 我有一个struct类型,它有另一个struct。 我试图使用regexp和replaceall,但在replaceall失败 func(*Regexp)ReplaceAll func(re*Regexp)ReplaceAll(src,repl[]字节)[]字节 也许有一种更简单的方法可以将一个列表过滤到一个我在某个地方遗漏的新列表,但我发现这是迄今为止最接近的解

我从一个网站上下载了一个XML列表。我试图通过丢弃包含某个字符串的行,并在不包含该字符串的行的情况下构建相同类型的列表来过滤列表。 我有一个
struct
类型,它有另一个
struct
。 我试图使用
regexp
replaceall
,但在
replaceall
失败

func(*Regexp)ReplaceAll
func(re*Regexp)ReplaceAll(src,repl[]字节)[]字节
也许有一种更简单的方法可以将一个列表过滤到一个我在某个地方遗漏的新列表,但我发现这是迄今为止最接近的解决方案。请分享grep和删除新列表中的行的其他方法。该列表在正文中是一个字节,并作为xml下载

键入PeopleList结构{
Peoples[]Person`xml:“Peoples>Person”`
}
类型Person结构{
添加字符串`xml:“添加,属性”`
Loc string`xml:“Loc,attr”`
Har string`xml:“Har,attr”`
名称字符串`xml:“名称,属性”`
国家/地区字符串`xml:“国家/地区,属性”`
Num string`xml:“Num,attr”`
ADD2字符串`xml:“ADD2,attr”`
距离浮动64
func fetchPeopleList(userinfo userinfo)PeopleList{
变量p字节
jam,err:=http.Get(字符串(peoplelisturl))
错误
body,err:=ioutil.ReadAll(jam.body)
窥视:=身体
reg:=regexp.MustCompile((?m)[\r\n]+^.*错误:.*$)
rep:=reg.ReplaceAll(peeps,p)//此处失败可能是因为我的语法。错误:无法将p(byte类型的变量)用作re.ReplaceAll的参数中的[]字节值
fmt.Println(代表)
错误
defer jam.Body.Close()延迟

最后,我想要一个与第一个相同格式的新列表,只是没有包含字符串的行。

您的问题说您想“放弃行”,但是,
Replace
/
ReplaceAll
,顾名思义,它们是用来替换匹配的模式的。您的正则表达式也是一个简单的子字符串匹配,因此显而易见的解决方案似乎是逐行读取文件,并且如标题所示,丢弃包含子字符串的行

func fetchPeopleList(userinfo Userinfo) PeopleList {
    jam, err := http.Get(string(peoplelisturl))
    iferror (err)
    br := bufio.NewReader(jam.Body)
    defer jam.Body.Close()
    for {
        line,err := br.ReadString('\n')
        if !strings.Contains(line, "BAD:") {
            fmt.Println(line) // or whatever you want to do with non-discarded lines
        }
        if err != nil {
            break
        }
    }

“替换失败”,请解释失败模式,并在问题中完整引用收到的所有错误。感谢Adrian的快速回答。我将尝试此方法并与大家分享它是否有效。检查后发现此方法无效。at:对于line,err expected boolean或range expression,find assignment(复合文字周围缺少括号?)已编辑。您只是复制、粘贴并运行了代码,还是您真的理解了它?您需要进一步的解释吗?您添加的大括号起到了帮助作用,并且一直在尝试将其合并到更大的代码中,仍在使用.TY!