«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как захватить несколько групп в кавычках в Go: решение для регулярных выражений

Как захватить несколько групп в кавычках в Go: решение для регулярных выражений

Опубликовано 7 ноября 2024 г.
Просматривать:273

How to Capture Multiple Quoted Groups in Go: A Regex Solution

Захват нескольких групп в кавычках в 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])
}

теперь можно успешно зафиксировать все аргументы. Это пересмотренное регулярное выражение является более универсальным и допускает вариации формата ввода, в которых команды и аргументы могут встречаться в разном порядке.


  1. "
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3