Go:从两个字符或其他字符串之间检索字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go:从两个字符或其他字符串之间检索字符串相关的知识,希望对你有一定的参考价值。

比方说我有一个字符串,如下所示:

<h1>Hello World!</h1>

什么Go代码能够从该字符串中提取Hello World!?我还是比较新的Go。任何帮助是极大的赞赏!

答案

有很多方法可以在所有编程语言中拆分字符串。

因为我不知道你是什么特别要求我提供一个样本方法来从你的样本中获得你想要的输出。

package main

import "strings"
import "fmt"

func main() {
    initial := "<h1>Hello World!</h1>"

    out := strings.TrimLeft(strings.TrimRight(initial,"</h1>"),"<h1>")
    fmt.Println(out)
}

在上面的代码中,你从字符串的左边修剪<h1>,从右边修剪</h1>

正如我所说,有数百种方法可以分割特定的字符串,这只是一个让你入门的例子。

希望它有所帮助,祝你好运Golang :)

DB

另一答案

如果字符串看起来像什么; START; extract; END;无论你怎么用都可以:

// GetStringInBetween Returns empty string if no start string found
func GetStringInBetween(str string, start string, end string) (result string) {
    s := strings.Index(str, start)
    if s == -1 {
        return
    }
    s += len(start)
    e := strings.Index(str, end)
    return str[s:e]
}

这里发生的是它将找到START的第一个索引,添加START字符串的长度并返回从那里存在的所有内容直到END的第一个索引。

另一答案

strings pkg中你可以使用Replacer来产生很大的影响。

r := strings.NewReplacer("<h1>", "", "</h1>", "")
fmt.Println(r.Replace("<h1>Hello World!</h1>"))

play!

另一答案
func findInString(str, start, end string) ([]byte, error) {
    var match []byte
    index := strings.Index(str, start)

    if index == -1 {
        return match, errors.New("Not found")
    }

    index += len(start)

    for {
        char := str[index]

        if strings.HasPrefix(str[index:index+len(match)], end) {
            break
        }

        match = append(match, char)
        index++
    }

    return match, nil
}
另一答案

阅读弦乐包。看看SplitAfter函数,它可以做这样的事情:

var sample = "[this][is my][string]"
t := strings.SplitAfter(sample, "[")

这应该产生一个像:"[", "this][", "is my][", "string]"。使用其他功能进行修剪,您应该得到解决方案。祝你好运。

另一答案
func Split(str, before, after string) string {
    a := strings.SplitAfterN(str, before, 2)
    b := strings.SplitAfterN(a[len(a)-1], after, 2)
    if 1 == len(b) {
        return b[0]
    }
    return b[0][0:len(b[0])-len(after)]
}

SplitAfterN的第一次调用会将原始字符串拆分为由第一个找到的after字符串划分的2个部分的数组,或者它将生成包含等于原始字符串的1个部分的数组。

SplitAfterN的第二次调用使用a[len(a)-1]作为输入,因为它是“数组a的最后一项”。所以after之后的字符串或原始字符串str。输入将被分成2个部分的数组,除以第一个找到的before字符串,或者它将产生包含1个等于输入的部分的数组。

如果找不到after,我们可以简单地返回b[0],因为它等于a[len(a)-1]

如果找到after,它将包含在b[0]字符串的末尾,因此你必须通过b[0][0:len(b[0])-len(after)]修剪它

所有字符串都区分大小写

另一答案

刚遇到类似的问题,只是我不知道我的输入字符串是否包含任何甚至多对START或STOP字符!所以我的一般解决方案是:

s := "\x02this is a test\x03-\x02another test\x03"
start, end := "\x02", "\x03" // just replace these with whatever you like...
sSplits := strings.Split(s, start)
result := []string{}

if len(sSplits) > 1 { // n splits = 1 means start char not found!
    for _, subStr := range sSplits { // check each substring for end
        ixEnd := strings.Index(subStr, end)
        if ixEnd != -1 {
            result = append(result, subStr[:ixEnd])
        }
    }
}

以上是关于Go:从两个字符或其他字符串之间检索字符串的主要内容,如果未能解决你的问题,请参考以下文章

从本机调用 C# 以检索字符串

如何在导航抽屉活动模板中的片段之间传递字符串变量

Go语言编程之字符串与其他数据类型之间的转换

JavaScript重点记忆

需要正则表达式来匹配两个单词,因为它们之间可能有任意数量的空格或其他字符

将字符串数据从Activity发送到片段[关闭]