Разобрать выходные данные из фрагмента строки в другой фрагмент строки - PullRequest
0 голосов
/ 20 января 2020

Мой ввод

[v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:2.44.5.76/32 ~all]

Он имеет тип

[]string

А количество элементов в нем

1

Моя цель - разобрать этот срез, так что мой вывод имеет тип строковый срез, но содержит только IP-адреса, и каждый IP-адрес является отдельным элементом в срезе

Вывод должен выглядеть так:

[35.190.247.0/24 64.233.160.0/19 2.44.5.76/32]

Тип должен быть

[]string

И количество элементов должно быть

3

Так что я делаю, чтобы сначала заменить v=spf1 ip4:

j := strings.Replace(t.Txt[0], "v=spf1 ", "", -1)
k := strings.Replace(j, "ip4:", "", -1)
l := strings.Replace(j, "~all", "", -1)

Это дает мне

35.190.247.0/24 64.233.160.0/19 2.44.5.76/32

типа

string

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

for i, word := range l {
    fmt.Println(word)
}

Но вместо получения

0 35.190.247.0/24 
1 64.233.160.0/19 
2 2.44.5.76/32

я получаю

0 51
1 53
2 46
3 49
4 57
5 48
6 46

В чем здесь проблема? Я не могу понять это

1 Ответ

0 голосов
/ 20 января 2020

Используя range l, вы выполняете итерацию по руне строк. В вашем случае это просто ASCII-коды IP-адресов.

Вы были недалеко от решения:

j := strings.Replace(t.Txt[0], "v=spf1 ", "", -1)
k := strings.Replace(j, "ip4:", "", -1)
l := strings.Replace(j, " ~all", "", -1) // <- I added a space in front of "~all".
res := strings.Split(l, " ")

Res теперь представляет собой фрагмент с тремя строками, каждая из которых соответствует IP-адресу.

Вы могли бы также использовать следующий код для достижения того же результата.

l := strings.Replace(t.Txt[0][7:len(t.Txt[0])-5], "ip4:", "", -1)
res := strings.Split(l, " ") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...