Захват нескольких групп в кавычках в Go
В этой статье рассматривается проблема синтаксического анализа строк, которые соответствуют определенному формату: команда в верхнем регистре, за которой следует необязательная команда приведенные аргументы. Цель состоит в том, чтобы извлечь команду и аргументы в виде отдельных строк.
Для решения этой задачи используется регулярное выражение: re1, _ := regexp.Compile(([A-Z] )(?: " (1 )")*). Первая группа захвата ([A-Z] ) соответствует команде в верхнем регистре, а вторая группа захвата (?: "([^"] )")* соответствует нулю или более аргументам в кавычках.
Однако предоставленный код захватывает только последний аргумент. Чтобы решить эту проблему, предлагается более упрощенное регулярное выражение: re1, _ := regexp.Compile(([A-Z] )|(?: "(1 )")). Это регулярное выражение использует объединение |, чтобы разрешить команду или аргумент.
Изменив код на:
re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)
results := re1.FindAllStringSubmatch(`COMMAND "arg1" "arg2" "arg3"`, -1)
fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
fmt.Println("Arg:", arg[2])
}
теперь можно успешно зафиксировать все аргументы. Это пересмотренное регулярное выражение является более универсальным и допускает вариации формата ввода, в которых команды и аргументы могут встречаться в разном порядке.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3