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

如何制作正则表达式以匹配模式之间带有随机点的字符串?

如何制作正则表达式以匹配模式之间带有随机点的字符串?

Go
有只小跳蛙 2022-06-13 17:36:39
我想将一个字符串与一片模式进行比较,看看是否有任何带有点的模式排列:函数看起来像这样:patterns := []string{"cat", "fish", "dog"}func HasBadPattern(word string, patterns []string) bool {           for _, p := range patterns {        myRegex, err := regexp.Compile(p)        if err != nil {            log.Println(err)        }        //Don't know how to perpare the wordToCompile ?        matched := myRegex.FindString(wordToCompile)        if len(matched) > 0 {            return true            break        }    }    return false}结果应该是这样的:HasBadPattern("c.at", patterns) //trueHasBadPattern("c.a.t", patterns) //trueHasBadPattern("c.a..t", patterns) //trueHasBadPattern("fis.h", patterns) //trueHasBadPattern("catfish", patterns) //falseHasBadPattern("here is the cat.", patterns) //falseHasBadPattern("cat is on the mat.", patterns) //falseHasBadPattern("cat.fish", patterns) //false我的问题是如何准备word为字符之间的点编译,而不会产生误报。
查看完整描述

2 回答

?
尚方宝剑之说

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

看起来您基本上想\.*在字符串的字符之间插入(零个或多个句点)。例如"c.at","c.a.t"和"c.a..t"都由表达式匹配^\.*c\.*a\.*t\.*$。


这可以使用类似的函数来完成(不是最有效的......):


func randomDots(word string) string {

    dots := "\\.*"

    expression := fmt.Sprintf("^%s", dots)


    for i := range word {

        expression += fmt.Sprintf("%c%s", word[i], dots)

    }

    expression += "$"

    return expression

}

然后你可以HasBadPattern改为:


func HasBadPattern(word string, patterns []string) bool {

    for _, p := range patterns {

        expression := randomDots(p)

        myRegex, _ := regexp.Compile(expression)

        matched := myRegex.FindString(word)

        if len(matched) > 0 {

            return true

        }

    }

    return false

}


查看完整回答
反对 回复 2022-06-13
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

匹配猫的情况。尝试遵循正则表达式。

您的正则表达式实现在 golang 中可能有所不同,我使用https://regexr.com对其进行了测试,它工作正常。引用点特殊字符也可能是一个好主意。

c[.]{0,}[.]a[.]{0,}[.]?t

它通过了你的测试用例。

如果您想匹配鱼或其他单词,那么您将动态地创建另一个正则表达式。

玩得开心!


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

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