У меня есть супергерои строка, все из них имеют имя с, но не все из них имеют атрибуты.
Он имеет формат ⛦name⛯attrName☾attrData☽
, где attrName☾attrData☽
является необязательным.
Итак, строка superheroes :
⛦superman⛯shirt☾blue☽⛦joker⛯⛦spiderman⛯age☾15yo☽girlFriend☾Cindy☽
Я хочу использовать Regex для извлечения строки и заполняет результат в фрагмент карты , например:
[ {name: superman, shirt: blue},
{name: joker},
{name: spiderman, age: 15yo, girlFriend: Cindy} ]
Я не могу это сделатьна игровой площадке Go.Я использую регулярное выражение ⛦(\\w+)⛯(?:(\\w+)☾(\\w+)☽)*
, но оно может захватывать только один атрибут, то есть регулярное выражение не может захватить атрибуты age
.
Мой код:
func main() {
re := regexp.MustCompile("⛦(\\w+)⛯(?:(\\w+)☾(\\w+)☽)*")
fmt.Printf("%q\n", re.FindAllStringSubmatch("⛦superman⛯shirt☾blue☽⛦joker⛯⛦spiderman⛯age☾15yo☽girlFriend☾Cindy☽", -1))
}
Код Go Playgroundздесь: https://play.golang.org/p/Epv66LVwuRK
Результат выполнения:
[
["⛦superman⛯shirt☾blue☽" "superman" "shirt" "blue"]
["⛦joker⛯" "joker" "" ""]
["⛦spiderman⛯age☾15yo☽girlFriend☾Cindy☽" "spiderman" "girlFriend" "Cindy"]
]
age
отсутствует, есть идеи?