我试图从引号之间的字符串中提取所有单词。这是我当前的代码: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]请帮我解决这个问题,或提出更好的替代方案。
2 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
如果您想保持简单,您可以添加一个惰性量词.*?
,".*?"
即正则表达式。你得到的原因"test" and a "demo"
是因为 just.*
是贪婪的并且匹配尽可能多的文本(因此,它实际上匹配"
beforetest
和 after demo
,忽略中间还有其他引号的事实)。
通常更好但在某些方面稍微复杂的方法是使用字符类"[^"]*"
,禁用它们之间的匹配引号。这也可能导致一些其他行为,例如包含换行符(在这种情况下,您也可以禁用它们[^"\n]
,或者您实际上想要这样的情况)
由于您也不想使用引号,因此需要做一些额外的事情。您可以使用 lookarounds:(?<=")[^"]*(?=")
或捕获组:"(.*?)"
和"([^"]*)"
。如果选择捕获组路由,则必须使用捕获组,而不是整个匹配项。
- 2 回答
- 0 关注
- 398 浏览
添加回答
举报
0/150
提交
取消