需要从字符串中提取单词的帮助.

STRING WORD NEEDS TO BE FETCHED
"A = 2&& B = 2 && func1(A) && func2(B)" func1, func2
"func1(A)" func1
"B = 2 && func2(A)" func2

我try 过遵循regex

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)
    }
}

但如果单词eg:对于字符串"func1(A)"来说,之前没有空间,则该regex提供空结果.

当单词前面有一个空位时,这会按预期工作,例如对于字符串"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")
    }
}

regex的解释:

(^|\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.

您可以测试代码here

Go相关问答推荐

在Uber FX中实现后台进程正常关闭的正确方式是什么?

如何给杜松子wine 的路由加上一个名字,比如Laravel ?

如何在 zap 记录器库中使用自定义时间函数

如何为循环扫描的bufio scanner 设置超时?

调用库和直接操作效率有区别吗?

如何在 Go 中将 int 转换为包含 complex128 的泛型类型?

Neptune 在连接到启用 IAM 的 Neptune 实例时抛出握手错误错误

如何使用泛型将接口转换为指定类型

Golang 中的泛型类型转换

Gorm delete with clauses sqlmock 测试

当函数返回一个函数时,为什么 Go 泛型会失败?

如何使用带有方法的字符串枚举作为通用参数?

从数据库中带有 imageurl 的文件夹中获取图像,并在我的浏览器中用 golang 中的 echo 显示

使用 Golang 在字符串中循环重复数据

在 Go 中发送 ack 和 term 后消息仍在 nats 限制队列中

如何在 golang 中同时加载 .env 文件和 os 环境变量

为什么我不能使用来自 gocloak 中 Login() 的访问令牌在 KeyCloak 中创建新客户端?

如何从 tinygo webassembly 目标返回对象

在 Golang 中使用 OR 条件验证 struct 的两个字段

如何扩充 ResponseWriter 的 Header() 返回的 map