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

Как захватить несколько повторяющихся групп в регулярных выражениях в Go?

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

How to Capture Multiple Repeating Groups in Regular Expressions in Go?

Захват повторяющихся групп в Go

При работе со строками, которые следуют определенному шаблону, захват повторяющихся групп может стать обычной задачей. В Go регулярные выражения являются мощным инструментом для этой цели.

Рассмотрим следующую проблему: анализ строк, состоящих из слова в верхнем регистре, за которым следуют ноль или более аргументов, заключенных в двойные кавычки. Цель состоит в том, чтобы извлечь как команду (слово в верхнем регистре), так и аргументы (строки в кавычках).

Подводные камни регулярных выражений

Распространенной ошибкой является использование регулярного выражения, например:

re1, _ := regexp.Compile(`([A-Z] )(?: "([^"] )")*`)

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

re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)

Захват команды и аргументов

Теперь, чтобы извлечь команду и аргументы, используйте функцию FindAllStringSubmatch с соответствующим образом измененным регулярным выражением:

results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)

Эти группы захвата регулярных выражений:

  • Группа 1: команда (слово в верхнем регистре)
  • Группа 2: Каждый аргумент (строка в двойных кавычках)

Итерация по результатам

Наконец, для итерации поверх результатов и отделите команду от аргументов:

fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
    fmt.Println("Arg:", arg[2])
}

Устранив недостатки регулярных выражений, вы сможете эффективно улавливать повторяющиеся группы в своем коде Go.

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

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

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

Copyright© 2022 湘ICP备2022001581号-3