需要帮助从字符串中获取单词。
字符串 | 需要获取单词 |
---|---|
“A = 2&& B = 2 && func1(A) && func2(B)” | 函数1,函数2 |
“func1(A)” | 功能1 |
“B = 2 && func2(A)” | func2 |
我尝试过以下正则表达式
package main
import (
"fmt"
"regexp"
)
func main() {
var re = regexp.MustCompile(`\s+(?:\w+_\w+)`)
var str = `func1(A)`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
但是如果单词之前没有空格,则此正则表达式提供空结果,例如:对于字符串“func1(A)”。
当单词前面有空格时,这将按预期工作,例如,对于字符串“B = 2 && func2(A)”,它按预期给出 func2。
如有任何帮助,我们将不胜感激
要查找所有请求的单词,您可以使用以下代码:
package main
import (
"fmt"
"regexp"
)
func main() {
var re = regexp.MustCompile(`(^|\s)(\w+)\(.*?\)`)
var str = `A = 2&& B = 2 && func1(A) && func2(B)
func1(A)
B = 2 && func2(A) func()`
for _, match := range re.FindAllStringSubmatch(str, -1) {
fmt.Println(match[2], "found")
}
}
正则表达式的解释:
(^|\s) - The beginning of a line or a whitespace.
(\w+) - Minimum 1 word character, with as many as possible.
\( - The opening bracket literally.
.*? - Any character, zero or few occurencies as possible.
\) - The closing bracket literally.