[英]Find all strings in between two strings in Go
我正在努力提取兩個字符串之間的多重匹配。
在下面的示例中,我試圖從我的字符串中正則表達式輸出AB C
substring。
這是我的代碼:
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)
}
我顯然在我的正則表達式中做錯了什么。 我正在嘗試在Movies:
和Food:
之間獲取AB C
字符串。
獲取兩個字符串之間的所有字符串的正確正則表達式是什么?
在 Go 中,由於其基於 RE2 的正則regexp
不支持環視,您需要使用regexp.FindAllStringSubmatch
function 的捕獲機制:
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)
請注意使用regexp.QuoteMeta
自動轉義左右分隔符中的所有特殊正則表達式元字符。
(?s)
使.
跨行匹配和(.*?)
將ABC
和XYZ
之間的所有內容捕獲到第 1 組中。
所以,在這里你可以使用
package main
import (
"fmt"
"regexp"
)
func main() {
str:= "Movies: A B C Food: 1 2 3"
r := regexp.MustCompile(`Movies:\s*(.*?)\s*Food`)
matches := r.FindAllStringSubmatch(str, -1)
for _, v := range matches {
fmt.Println(v[1])
}
}
請參閱Go 演示。 Output: AB C
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.