Задать вопрос
@useers

Как в GO искать группы подсовпадений в текстовом файле?

Здесь: "https://coderlessons.com/articles/go/reguliarnye-v...,
в разделе "Группировка" есть пример:
func main() {
    e := `(?P<first>\w+) (?P<middle>.+ )?(?P<last>\w+)`
    r := regexp.MustCompile(e)
    names := r.SubexpNames()
    fullNames := []string{
        `John F. Kennedy`,
        `Michael Jordan`}
    for _, fullName := range fullNames {
        result := r.FindAllStringSubmatch(fullName, -1)
        m := map[string]string{}
        for i, n := range result[0] {
            m[names[i]] = n
        }
        fmt.Println(«first name:», m[«first»])
        fmt.Println(«middle_name:», m[«middle»])
        fmt.Println(«last name:», m[«last»])
        fmt.Println()
    }
}
 
Output:
 
first name: John
middle_name: F.
last name: Kennedy
 
first name: Michael
middle_name:
last name: Jordan

Код рабочий, но мне хотелось бы его изменить на поиск данных в файле (ioutil.ReadFile),
а он ругается на строку for i, n := range resultf[0]:

panic: runtime error: index out of range [0] with length 0
goroutine 1 [running]:
main.main()
C:/Users/Пользователь/go/src/test/test.go:17 +0x430
exit status 2

То есть вопрос заключается в том, как прочитанный из файла массив, подкинуть в fullNames
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Средний 4 комментария
Решения вопроса 1
@dodo512
index out of range [0] with length 0

Если FindAllStringSubmatch не найдёт совпадения с шаблоном, то result будет пуст.
for _, fullName := range fullNames {
    result := r.FindAllStringSubmatch(fullName, -1)
    if len(result) == 0 {
        continue
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы