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