首页 > 解决方案 > Golang - 使用多个复杂的正则表达式模式扫描字符串

问题描述

我正在尝试使用 golang 的regexp库来测试正则表达式。基本上,我的目标是使用给定的正则表达式模式列表扫描给定的文件名列表。我这样做是为了查看文件名是否与特定模式匹配(只有 1 个字母或数字的文件/没有扩展名的文件等)

我查看了regexp库并注意到该Compile函数只能采用 1 个模式并且只能返回 1 个regexp对象。这在我的情况下不起作用,因为我有一个多个模式的列表。

还有MatchString一个功能,我可以使用给定模式一次扫描一个文件名。但就像文档所述,它不支持复杂的模式。

有什么方法可以在代码的开头提供我的正则表达式模式列表并获取一个regexp对象,我可以用它来扫描整个程序的文件名列表?

标签: regexgo

解决方案


您可以尝试使用现有的正则表达式函数创建自己的正则表达式函数,如下所示:

package main

import (
    "fmt"
    "log"
    "regexp"
)

func main() {
    listOfPatterns := []string{"pattern1", "pattern2", "pattern3"}
    listOfFilenames := []string{"nopattern01.txt", "ispattern1.txt", "nopattern01.txt", "ispattern2"}

    fmt.Println(CheckPatternList(listOfPatterns, listOfFilenames))
}

func CheckPatternList(listOfPatterns []string, listOfFilenames []string) []string {
    matchedElements := []string{}
    for _, element := range listOfFilenames {
        for _, regex := range listOfPatterns {
            didMatched, err := regexp.MatchString(regex, element)
            if err != nil {
                log.Fatal(err)
            }
            if didMatched == true {
                matchedElements = append(matchedElements, element)

            }
        }
    }
    return matchedElements
}

运行 Go Playground 示例


推荐阅读