regex - Golang - 使用多个复杂的正则表达式模式扫描字符串
问题描述
我正在尝试使用 golang 的regexp
库来测试正则表达式。基本上,我的目标是使用给定的正则表达式模式列表扫描给定的文件名列表。我这样做是为了查看文件名是否与特定模式匹配(只有 1 个字母或数字的文件/没有扩展名的文件等)
我查看了regexp
库并注意到该Compile
函数只能采用 1 个模式并且只能返回 1 个regexp
对象。这在我的情况下不起作用,因为我有一个多个模式的列表。
还有MatchString
一个功能,我可以使用给定模式一次扫描一个文件名。但就像文档所述,它不支持复杂的模式。
有什么方法可以在代码的开头提供我的正则表达式模式列表并获取一个regexp
对象,我可以用它来扫描整个程序的文件名列表?
解决方案
您可以尝试使用现有的正则表达式函数创建自己的正则表达式函数,如下所示:
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
}
推荐阅读
- html - Visual Studio 代码扩展以干净地缩进现有的 html 代码
- reactjs - 为什么我需要将函数放在 setState 方法中才能工作?
- visual-studio-code - Visual Studio Code Save All 按钮问题
- laravel - Laravel:如何根据 mime 类型验证同一文件的多个大小规则
- .htaccess - 如何限制对.htaccess中文件的访问到特定域
- javascript - 我通过表单发送的数据不显示(localStorage)
- c# - IWebElement.Text 属性转换的表情符号的
- pyspark - 仅检索数据框列时的pyspark java堆空间错误
- javascript - Vue Showdown 默认类
- python - Python-binance期货用户数据websocket