РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
444 of 1593 menu

Метод regexp.Regexp.SubexpIndex

Метод regexp.Regexp.SubexpIndex возвращает индекс именованной подгруппы (subexpression) в регулярном выражении по её имени. Он полезен для работы с именованными захватывающими группами, когда необходимо получить числовой индекс группы для использования в других методах, таких как FindStringSubmatch или FindStringSubmatchIndex. Если группа с указанным именем не найдена, метод возвращает -1. Метод принимает один параметр - имя подгруппы в виде строки.

Синтаксис

re.SubexpIndex(name)

Пример

Давайте получим индекс именованной подгруппы "year" в регулярном выражении для разбора даты:

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})`) res := re.SubexpIndex("year") fmt.Println(res) }

Результат выполнения кода:

1

Индекс 1 соответствует первой захватывающей группе, поскольку индекс 0 всегда соответствует всему совпадению.

Пример

Давайте получим индексы всех именованных подгрупп в регулярном выражении:

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(?P<first>[a-z]+) (?P<last>[a-z]+)`) yearIdx := re.SubexpIndex("first") monthIdx := re.SubexpIndex("last") fmt.Println(yearIdx, monthIdx) }

Результат выполнения кода:

1 2

Пример

Давайте проверим, что будет возвращено при запросе несуществующей подгруппы:

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(?P<name>[a-z]+)`) res := re.SubexpIndex("unknown") fmt.Println(res) }

Результат выполнения кода:

-1

Метод возвращает -1, если подгруппа с указанным именем не найдена в регулярном выражении.

Пример

Давайте используем полученный индекс для извлечения значения подгруппы из совпадения:

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`(?P<product>[a-z]+)-(?P<code>\d+)`) text := "item-12345" matches := re.FindStringSubmatch(text) idx := re.SubexpIndex("code") if idx != -1 && idx < len(matches) { fmt.Println(matches[idx]) } }

Результат выполнения кода:

"12345"

Смотрите также

  • метод Regexp.SubexpNames,
    который возвращает имена всех подгрупп в регулярном выражении
  • метод Regexp.FindStringSubmatch,
    который находит совпадения и возвращает их в виде среза строк
  • метод Regexp.FindStringSubmatchIndex,
    который возвращает индексы совпадений подгрупп
  • метод Regexp.NumSubexp,
    который возвращает количество подгрупп в регулярном выражении
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить