Go lang 从字符串中获取匹配的子字符串

我试图从引号之间的字符串中提取所有单词。


这是我当前的代码:


func StrExtract(word string) []string {

  r, _ := regexp.Compile(`".*"`)

  result := r.FindAllString(word, -1)

  RemoveDuplicates(&result)

  return (result)

}

在这里测试代码


输入如下:


`Hi guys, this is a "test" and a "demo" ok?`

我得到输出:


["test" and a "demo"]

但我想得到:


[test demo]

请帮我解决这个问题,或提出更好的替代方案。


萧十郎
浏览 399回答 2
2回答

神不在的星期二

如果您想保持简单,您可以添加一个惰性量词.*?,".*?"即正则表达式。你得到的原因"test" and a "demo"是因为 just.*是贪婪的并且匹配尽可能多的文本(因此,它实际上匹配"beforetest和 after&nbsp;demo,忽略中间还有其他引号的事实)。通常更好但在某些方面稍微复杂的方法是使用字符类"[^"]*",禁用它们之间的匹配引号。这也可能导致一些其他行为,例如包含换行符(在这种情况下,您也可以禁用它们[^"\n],或者您实际上想要这样的情况)由于您也不想使用引号,因此需要做一些额外的事情。您可以使用 lookarounds:(?<=")[^"]*(?=")或捕获组:"(.*?)"和"([^"]*)"。如果选择捕获组路由,则必须使用捕获组,而不是整个匹配项。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go