我有一串如下形式的字符串

"abcd<*15<<defgj<*3fsdfsdf"

我想把<<*都取出来,后面跟一个数字,例如<*15<*8<*1

我有这个:

<\*?[0-9+]?

在示例字符串中匹配的

<*1
<
<
<*3

但我希望它与第一个匹配&lt;*15

我以为+在正则表达式中做到了这一点,所以我不确定为什么它不起作用.

我也试过了

<\*?[\d+]?

但我还是最多只能得到<*个数字

<总是单独出现,或者后面跟着*,后面跟着一个数字.我想把<6作为<来捕捉

如果<后面跟*,但之后没有数字.我只想抓到<

推荐答案

你需要

<(?:\*\d+)?

请看regex demo.

Details:

  • <-<个字符
  • (?:\*\d+)?-一个可选的非捕获组,匹配*个字符及其后面的一个或多个数字的一次或零次重复.

请参阅Go demo:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    r := regexp.MustCompile(`<(?:\*\d+)?`)
    matches := r.FindAllStringSubmatch("<*1 < <6", -1)
    for _, v := range matches {
        fmt.Println(v[0])
    }
}

输出

<*1
<
<

Go相关问答推荐

有没有更简单的方法在Go中编写这个逻辑?

如何在定制普罗米修斯出口商中测试动态计量注册?

更改位置级别和时间戳零点Golang

GoLang:无法发送带有附件的邮箱

JWT 如何解析声明有效性和错误?

nixOS 上的 Nginx 反向代理在try 加载 css/js 时返回 404

如何绕过深层 xml,没有嵌套循环?

htmx 表单 + gin 无法正确读取请求正文

使用golang sqlc中的引用参数

尽管存在 WaitGroup,Goroutines 似乎被打断了

GitHub 中 REST API 的 aws 凭证问题

缺少签名帮助文档

使用自定义处理程序 nats golang 保留订阅方法

如何模仿联合类型

我相信我正确地在 sRGB 和线性 RGB 之间进行了转换,那么为什么深色的结果看起来更糟呢?

NaN 是 golang 中的可比类型吗?

在 Go 中将指针传递给函数的正确方法是什么,以便我可以读取和/或修改指针表示的值?

如何在眼镜蛇(golang)中将标志作为参数传递?

如何从应用程序调用谷歌云身份 API

Go 错误:cannot use generic type without instantiation