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