Golang 正则表达式:获取带有左括号和右括号的单词

问题描述 投票:0回答:1

需要帮助从字符串中获取单词。

字符串 需要获取单词
“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。

如有任何帮助,我们将不胜感激

go
1个回答
0
投票

要查找所有请求的单词,您可以使用以下代码:

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.

您可以在这里测试代码

© www.soinside.com 2019 - 2024. All rights reserved.