GOLANG | Как распарсить строку

Рейтинг: 0Ответов: 1Опубликовано: 24.03.2023

Имею строку (<<GRADIENT>>Hello<</GRADIENT>> <<GREEN>>world<</GREEN>> <<UNDERSCORE>>all<</UNDERSCORE>>)

Как я могу получить слова, расположенные между <<GRADIENT>> и <</GRADIENT>> ?

Ответы

▲ 0

Я бы пользовался регулярными выражениями

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile(`<<GRADIENT>>([^<>]*)<</GRADIENT>>`)
    str := `<<GRADIENT>>Hello<</GRADIENT>> <<GREEN>>world<</GREEN>> <<UNDERSCORE>>all<</UNDERSCORE>>`
    match := re.FindStringSubmatch(str)
    if match != nil {
        fmt.Println("Между <<GRADIENT>> и <</GRADIENT>>: ", match[1])
    } else {
        fmt.Println("Ничего нет")
    }
}

Выражение <<GRADIENT>>([^<>]*)<</GRADIENT>> ищет строку, которая состоит из префикса <<GRADIENT>>, затем идёт произвольная подстрока, в которой нет символов < и >, и заканчивается суффиксом <</GRADIENT>>.

Метод FindStringSubmatch ищет строку, подходящую под описание, и если находит, возвращает массив из двух элементов. mathc[0] - вся найденная строка, match[1] - та часть строки, которая соответствует первой группе, т.е. части регулярного выражения в скобках. А в скобках у нас, как вы помните, ([^<>]*) - та часть строки, которая между префиксом и суффиксом.

Метод FindStringSubmatch ищет первую подходящую строку. Если у вас в строке несколько градиентов, то этот метод найдёт только один. Метод FindAllStringSubmatch найдёт все сразу.