Go lang 从字符串中获取匹配的子字符串
Go lang get matching substring from string
我正在尝试从引号之间的字符串中提取所有单词。
这是我当前的代码:
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]
请帮我解决这个问题,或提出更好的替代方案。
你可以只添加一个惰性量词 .*?
,".*?"
作为正则表达式,如果你想保持简单的话。你得到 "test" and a "demo"
的原因是因为 .*
是贪婪的并且匹配尽可能多的文本(因此,它实际上匹配 test
之前和 [=16 之后的 "
=], 忽略中间还有其他引号的事实).
通常更好但在某些方面稍微复杂一点的方法是使用字符 类 "[^"]*"
,禁用它们之间的匹配引号。这也可能导致一些其他行为,例如包含换行符(在这种情况下您也可以禁用它们 [^"\n]
,或者您可能真的想要这样的情况)
由于您也不想使用引号,还需要做一些额外的事情。您可以使用环视:(?<=")[^"]*(?=")
,或使用捕获组:"(.*?)"
和 "([^"]*)"
。如果选择捕获组路由,则必须使用捕获组,而不是整个匹配。
正则表达式:
"(.*?)"
这是一个在线演示:
https://regex101.com/r/sI4tA9/1
你现在要做的就是加入比赛。不幸的是,我对 go
不是很感兴趣,所以在这种情况下我无法帮助您
我正在尝试从引号之间的字符串中提取所有单词。
这是我当前的代码:
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]
请帮我解决这个问题,或提出更好的替代方案。
你可以只添加一个惰性量词 .*?
,".*?"
作为正则表达式,如果你想保持简单的话。你得到 "test" and a "demo"
的原因是因为 .*
是贪婪的并且匹配尽可能多的文本(因此,它实际上匹配 test
之前和 [=16 之后的 "
=], 忽略中间还有其他引号的事实).
通常更好但在某些方面稍微复杂一点的方法是使用字符 类 "[^"]*"
,禁用它们之间的匹配引号。这也可能导致一些其他行为,例如包含换行符(在这种情况下您也可以禁用它们 [^"\n]
,或者您可能真的想要这样的情况)
由于您也不想使用引号,还需要做一些额外的事情。您可以使用环视:(?<=")[^"]*(?=")
,或使用捕获组:"(.*?)"
和 "([^"]*)"
。如果选择捕获组路由,则必须使用捕获组,而不是整个匹配。
正则表达式:
"(.*?)"
这是一个在线演示: https://regex101.com/r/sI4tA9/1
你现在要做的就是加入比赛。不幸的是,我对 go
不是很感兴趣,所以在这种情况下我无法帮助您