Удалить все символы после разделителя в строке - PullRequest
0 голосов
/ 29 октября 2019

Я создаю приложение для сканирования веб-страниц в golang.

После загрузки HTML-страницы я выделяю URL-адреса. Мне представлены URL-адреса, в которых есть «#», например «en.wikipedia.org/wiki/Race_condition#Computing». Я хотел бы избавиться от всех символов, следующих за «#», так как они все равно ведут на одну и ту же страницу. Любой совет, как это сделать?

Ответы [ 2 ]

2 голосов
/ 29 октября 2019

Улучшение ответа Люка Джошуа Парка состоит в том, чтобы разобрать URL-адрес относительно URL-адреса исходной страницы. Это создает абсолютный URL из того, что может быть относительным URL на странице (схема не указана, хост не указан, относительный путь). Еще одним улучшением является проверка и обработка ошибок.

func clean(pageURL, linkURL string) (string, error) {
    p, err := url.Parse(pageURL)
    if err != nil {
        return "", err
    }
    l, err := p.Parse(linkURL)
    if err != nil {
        return "", err
    }
    l.Fragment = ""   // chop off the fragment
    return l.String()
}

Если вы не заинтересованы в получении абсолютного URL, отрубите все после #. Это работает, потому что единственное допустимое использование # в URL - это разделитель фрагментов.

 func clean(linkURL string) string {
    i := strings.LastIndexByte(linkURL, '#')
    if i < 0 {
        return linkURL
    }
    return linkURL[:i]
 }
2 голосов
/ 29 октября 2019

Используйте пакет url:

u, _ := url.Parse("SOME_URL_HERE")
u.Fragment = ""
return u.String()
...