我正在努力提取两个字符串之间的多重匹配。
在下面的示例中,我尝试A B C从字符串中正则表达式输出子字符串。
这是我的代码:
package main
import (
"fmt"
"regexp"
)
func main() {
str:= "Movies: A B C Food: 1 2 3"
re := regexp.MustCompile(`[Movies:][^Food:]*`)
match := re.FindAllString(str, -1)
fmt.Println(match)
}
Run Code Online (Sandbox Code Playgroud)
我的正则表达式显然做错了什么。我正在尝试获取和A B C之间的字符串。Movies:Food:
获取两个字符串之间的所有字符串的正确正则表达式是什么?
在Go中,由于其基于RE2regexp不支持lookarounds,因此您需要使用带有函数的捕获regexp.FindAllStringSubmatch机制:
left := "LEFT_DELIMITER_TEXT_HERE"
right := "RIGHT_DELIMITER_TEXT_HERE"
rx := regexp.MustCompile(`(?s)` + regexp.QuoteMeta(left) + `(.*?)` + regexp.QuoteMeta(right))
matches := rx.FindAllStringSubmatch(str, -1)
Run Code Online (Sandbox Code Playgroud)
请注意,它的使用regexp.QuoteMeta会自动转义左侧和右侧分隔符中的所有特殊正则表达式元字符。
进行跨线匹配并(?s)捕获第 1 组之间和第 1 组中的所有内容。.(.*?)ABCXYZ
所以,在这里你可以使用
left := "LEFT_DELIMITER_TEXT_HERE"
right := "RIGHT_DELIMITER_TEXT_HERE"
rx := regexp.MustCompile(`(?s)` + regexp.QuoteMeta(left) + `(.*?)` + regexp.QuoteMeta(right))
matches := rx.FindAllStringSubmatch(str, -1)
Run Code Online (Sandbox Code Playgroud)
请参阅Go 演示。输出:A B C。