GOLANG | Как распарсить строку
Имею строку (<<GRADIENT>>Hello<</GRADIENT>> <<GREEN>>world<</GREEN>> <<UNDERSCORE>>all<</UNDERSCORE>>)
Как я могу получить слова, расположенные между <<GRADIENT>> и <</GRADIENT>> ?
Ответы (1 шт):
Я бы пользовался регулярными выражениями
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 найдёт все сразу.