Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/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
String Go:从两个字符或其他字符串之间检索字符串_String_Go_Substring - Fatal编程技术网

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

String Go:从两个字符或其他字符串之间检索字符串,string,go,substring,String,Go,Substring,例如,假设我有一个字符串,如下所示: <h1>Hello World!</h1> var sample = "[this][is my][string]" t := strings.SplitAfter(sample, "[") 你好,世界! Go代码能够提取什么Hello World来自该字符串?我还是个新手。非常感谢您的帮助 仔细阅读字符串包。查看可以执行以下操作的函数: <h1>Hello World!</h1> var sample

例如,假设我有一个字符串,如下所示:

<h1>Hello World!</h1>
var sample = "[this][is my][string]"
t := strings.SplitAfter(sample, "[")
你好,世界!

Go代码能够提取什么
Hello World来自该字符串?我还是个新手。非常感谢您的帮助

仔细阅读字符串包。查看可以执行以下操作的函数:

<h1>Hello World!</h1>
var sample = "[this][is my][string]"
t := strings.SplitAfter(sample, "[")

这应该会生成一个类似于:
“[”,“this][”,“is my][”,“string]”的切片。使用进一步的函数进行修剪,您应该可以得到您的解决方案。祝你好运。

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

因为我不知道你特别想要什么,所以我提供了一个获取输出的示例方法 你想从你的样品中得到什么

package main

import "strings"
import "fmt"

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

    out := strings.TrimLeft(strings.TrimRight(initial,"</h1>"),"<h1>")
    fmt.Println(out)
}
主程序包
导入“字符串”
输入“fmt”
func main(){
首字母:=“你好,世界!”
out:=strings.trimleeft(strings.trimlright(首字母“”)”)
fmt.Println(输出)
}
在上面的代码中,从字符串的左侧修剪
,从右侧修剪

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

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

DB

在pkg中,您可以使用替代品来产生重大影响

r := strings.NewReplacer("<h1>", "", "</h1>", "")
fmt.Println(r.Replace("<h1>Hello World!</h1>"))
r:=strings.NewReplacer(“,”,“,”,”)
fmt.Println(r.Replace(“你好,世界!”)

如果字符串看起来像什么,则转到

;开始摘录结束;无论您可以使用什么,它都将获得介于以下两者之间的字符串:

// 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[s:], end)
    if e == -1 {
        return
    }
    e += s + e - 1
    return str[s:e]
}
这里发生的事情是,它将找到开始的第一个索引,添加开始字符串的长度,并返回从那个里到结束的第一个索引的所有存在

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
}
SplitAfterN
的第一次调用将原始字符串拆分为2个部分的数组,由
字符串之后第一个找到的
划分,或者它将生成包含1个部分等于原始字符串的数组

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

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

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

所有字符串都区分大小写

我改进了`的答案。 现在,您可以在开始和结束处找到超过1个字符的字符串

func GetStringInBetweenTwoString(str string, startS string, endS string) (result string,found bool) {
    s := strings.Index(str, startS)
    if s == -1 {
        return result,false
    }
    newS := str[s+len(startS):]
    e := strings.Index(newS, endS)
    if e == -1 {
        return result,false
    }
    result = newS[:e]
    return result,true
}

您是否希望解析特定的模式或格式?例如,文本是否总是被标记、通用HTML或其他完全不同的内容包围?没有足够的信息来回答这个问题,所以我投了反对票。它只是匹配字符串。如果我击中一个匹配的字符串,然后另一个,然后给我中间的东西。为了操纵HTML,查看或。这个问题的好答案是错误的,因为修剪参数是一个字符列表而不是字符串。如果
initial:=“hhhhh ello”
则结果将是
ello
忽略此答案。它适用于@T145s特定情况,但不适用于一般情况。下面的答案非常有效。这是最好的答案,但是如果在开始之前没有找到结尾或者也找到了结尾,则会出现恐慌,请参阅此播放链接:。该播放链接还包括修复此问题的修订版。我将此修订提交给SO,SO正在进行同行评审。@schollz是正确的,并提供了更正确的答案。复制和粘贴这个答案是危险的,因为它会引起恐慌。不过,感谢Jan的原始工作。改进的答案是:这如何回答OP关于查找标记之间的字符串的问题?它只显示了如何删除标记。我的回答完全符合OP的要求:“什么Go代码能够从该字符串中提取Hello World!”