为了账号安全,请及时绑定邮箱和手机立即绑定

我可以确认字符串是否与我的正则表达式中的第一个块匹配吗

我可以确认字符串是否与我的正则表达式中的第一个块匹配吗

Go
POPMUISE 2023-02-06 14:40:42
我有以下代码:package mainimport (    "fmt"    "regexp")func main() {    str := "This is a delimited string, so let's go"    re := regexp.MustCompile(`(?i)(This is a delimited string)|delimited|string`)    matches := re.FindAllString(str, -1)    fmt.Println("We found", len(matches), "matches, that are:", matches)}并获得输出为:We found 1 matches, that are: [This is a delimited string]如果我将str上面代码中的更改为:str := "This is not a delimited string, so let's go"然后我得到的输出是:We found 2 matches, that are: [delimited string]两者都是正确的,但在str具有的第一个块中与我的正则表达式中的第一个块1 match匹配,而在显示 2 个匹配项的第二个块中,没有一个与我的正则表达式中的第一个块匹配。100%This is a delimited stringstr有没有办法,所以我知道是否str与我的正则表达式中的第一个块匹配,以便我得到完全匹配or部分匹配is thelen(matches)` 不为零,但正则表达式中的第一个块不匹配!
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

这个正则表达式:

(?i)(This is a delimited string)|delimited|string

匹配这些文字字符串的最左边最长的匹配项:

  • This is a delimited string,

  • delimited, 或者

  • string

将文本This is a delimited string, so let's go提供给正则表达式,第一个选项匹配。它是唯一的匹配项,因为它同时消耗了delimitedstring- 搜索在匹配项之后继续进行。

将您的替代文本This is not a delimited string, so let's go提供给正则表达式会产生 2 个匹配项,因为第一个替代文本不匹配,但第二个 ( delimited) 和第三个 ( string) 匹配。

如果您想知道匹配备选方案,只需将每个备选方案括在括号中以使其成为捕获组

(?i)(This is a delimited string)|(delimited)|(string)`

现在我们可以检查每个捕获组的值:如果它的长度大于 1,则它是匹配的备选方案。

https://goplay.tools/snippet/nTm56_al__2

package main


import (

    "fmt"

    "regexp"

)


func main() {

    str := "This is a delimited string, so let's go and find some delimited strings"


    re := regexp.MustCompile(`(?i)(This is a delimited string)|(delimited)|(string)`)


    matches := re.FindAllStringSubmatch(str, -1)


    fmt.Println("Matches:", len(matches))

    for i, match := range matches {

        j := 1

        for j < len(match) && match[j] == "" {

            j++

        }

        fmt.Println("Match", i, "matched alternative", j, "with", match[j])

    }


}


查看完整回答
反对 回复 2023-02-06
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信