Golang - 扫描具有多个复杂正则表达式模式的字符串



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

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

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

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

除非有一些固有的原因,你必须使用 Go 来解决这个问题,否则 Go 在正则表达式方面非常糟糕。请参阅:https://github.com/golang/go/issues/26623

过去,当我绝对需要做正则表达式时,我会使用 Perl 或 PyPy 设置某种服务器,当我需要处理和使用正则表达式时,可以通过某种端点访问这些服务器。

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

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 游乐场示例

最新更新