regex - 匹配 begging 和 end 字符而不从另一个搜索中获取它们
问题描述
如果不使用正则表达式环顾四周(go 不支持),我如何匹配开始和结束字符而不从另一个搜索中获取它们。
例如:想要匹配任何具有空格、逗号或分号以及开头和结尾的“狗”或“猫”。
所以:“狗狗,猫猫;”将匹配“狗”,“狗”,“猫”。到目前为止,我所拥有的 (?:[ ,;]|^)(cat|dog)(?:[ ,;]|$) 将返回 "dog" "cat" 因为在匹配之间使用空格
解决方案
我真的只看到用 Go 做这件事的几种方法。
最直接的方法是只匹配一侧,然后做一些后正则表达式逻辑:
https://play.golang.org/p/1_4fi-4kMhi
content := []byte("dog dog, cat cats; ")
re := regexp.MustCompile(`(?:[ ,;]|^)(cat|dog)`)
matches := re.FindAllIndex(content, -1)
for _, match := range matches {
next := string(content[match[1]])
if next == "," || next == " " || next == ";" {
fmt.Println(string(content[match[0]:match[1]+1]))
}
}
另一种方法是复制任何分隔符:
https://play.golang.org/p/krDlmHfepA1
content := []byte("dog dog, cat cats; ")
re := regexp.MustCompile(`([ ,;])`)
content = re.ReplaceAll(content, []byte("$1$1"))
fmt.Println(string(content))
re = regexp.MustCompile(`(?:[ ,;]|^)(cat|dog)(?:[ ,;]|$)`)
matches := re.FindAllSubmatch(content, -1)
for _, match := range matches {
for _, submatch := range match[1:] {
fmt.Println(string(submatch))
}
}
推荐阅读
- laravel - 为什么数据列是空的?Laravel 通知
- python - 在 Pandas 中计算具有重复校验和的文件
- excel - 自动调整以特定工作表开头的列
- django - 在Django中获取具有最大字段的对象的ID
- php - Facebook click-id missing (fbclid)
- html - items between the hr tag in HTML. Top HR tag is not aligning properly
- c - Wrong O_CREAT definition
- php - Create SQL query for Wordpress Multisite
- python-3.x - FileNotFoundError: [WinError 3] 使用两个连接字符串时
- go - 如何使用 gorilla mmux 对所有路由应用相同的处理程序