簡體   English   中英

查找 Go 中兩個字符串之間的所有字符串

[英]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)使. 跨行匹配和(.*?)ABCXYZ之間的所有內容捕獲到第 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM