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

时间:2015-07-24 10:03:06

标签: regex string go substring

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

这是我目前的代码:

func StrExtract(word string) []string {
  r, _ := regexp.Compile(`".*"`)
  result := r.FindAllString(word, -1)
  RemoveDuplicates(&result)
  return (result)
}

测试代码here

输入如下:

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

我得到了输出:

["test" and a "demo"]

但我想得到:

[test demo]

请帮我解决这个问题,或建议更好的选择。

2 个答案:

答案 0 :(得分:2)

如果您想保持简单,可以添加一个惰性量词.*?".*?"作为正则表达式。您获得"test" and a "demo"的原因是因为.*只是贪婪且匹配尽可能多的文本(因此,它实际上与"之前和{{1}之后的test匹配忽略了其他引号之间的事实。

通常更好但在某种程度上稍微复杂一点的方法是使用字符类demo,禁用其间的匹配引号。这也会导致一些其他行为,比如包括换行符(在这种情况下你也可以禁用它们"[^"]*",或者你真的想要这样的情况)

由于您还希望不再使用引号,因此需要执行一些其他操作。您可以使用以下内容:[^"\n]或使用捕获组执行此操作:(?<=")[^"]*(?=")"(.*?)"。如果选择捕获组路由,则必须使用捕获组,而不是整个匹配。

答案 1 :(得分:2)

正则表达式:

"(.*?)"

这是一个在线演示: https://regex101.com/r/sI4tA9/1

现在你所要做的就是参加比赛。不幸的是,我不是那么go,这就是为什么在这种情况下我无法帮助你