2016-05-01 3 views
3

Я разбираю xml rss-канал из нескольких разных источников, и я хочу найти изображения в html.Regexp для поиска изображений в html (golang)

Я сделал некоторые исследования, и я нашел регулярное выражение, которое я думаю, мог бы работать

/<img[^>]+src="?([^"\s]+)"?\s*\/>/g 

, но у меня есть проблемы с использованием его в дороге. Это дает мне ошибки, потому что я не знаю, как заставить его искать это выражение.

Я пробовал использовать его как строку, он не убежал должным образом с одиночным или с двойными кавычками. Я пробовал использовать его просто так, голый, и это дает мне ошибку.

Любые идеи?

+1

Чтобы получить неэкранированную кавычку использования строки. Пример: \ 'mystring \' – voutasaurus

ответ

3

Используя правильный HTML Parser всегда лучше для разбора HTML, однако дешевое/хака регулярного выражения также может работать нормально, вот пример:

var imgRE = regexp.MustCompile(`<img[^>]+\bsrc=["']([^"']+)["']`) 
// if your img's are properly formed with doublequotes then use this, it's more efficient. 
// var imgRE = regexp.MustCompile(`<img[^>]+\bsrc="([^"]+)"`) 
func findImages(htm string) []string { 
    imgs := imgRE.FindAllStringSubmatch(htm, -1) 
    out := make([]string, len(imgs)) 
    for i := range out { 
     out[i] = imgs[i][1] 
    } 
    return out 
} 

playground

+1

Спасибо! Это то, что я искал. Работает как магия. – Kalina

-1

Ах, извините, не работал с Go before, но это кажется работой. опробован на

https://tour.golang.org/welcome/1 

.

package main 

import (
    "fmt" 
    "regexp" 
) 

func main() { 
    var myString = `<img src='img1single.jpg'><img src="img2double.jpg">` 
    var myRegex = regexp.MustCompile(`<img[^>]+\bsrc=["']([^"']+)["']`) 
    var imgTags = myRegex.FindAllStringSubmatch(myString, -1) 
    out := make([]string, len(imgTags)) 
    for i := range out { 
    fmt.Println(imgTags[i][1]) 
    } 
} 

Я предлагаю использовать htmlagility для анализа любого типа dom/xml a.

Прочитать документ;

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(sourceHtml); 

Parse by Xpath определение RegX fine but group ext. проблемы делает JOB комплексу

doc.DocumentNode.SelectSingleNode(XPath here)  

или

doc.DocumentNode.SelectNodes("//img") // this should give all img tags 

нравится.

я предлагаю это becouse кажется RSS служит некоторый HTML содержание;) Так что XML, разобрана с XMLDoc получить HTML содержание, которое вам нужно затем получить все изображения от этого. Для открытого ответа.

после комментария только требуется regex я думаю; моего паттерн

<img.+?src=[\"'](.+?)[\"'].*?> 

для ввода

<img src='img1single.jpg'> 
<img src="img2double.jpg"> 

и результата кажется прекрасным в .net вы должны получить по Еогеаспу через

.Groups[1].Value 

отношений.

+0

Большое спасибо! Я уже разбираю свой xml с другим пакетом, но я полагаю, что могу использовать это, чтобы найти imgs в теге описания xml (который написан в html)? – Kalina

+0

Итак, что это за пакет? http://regexstorm.net/tester мой картина: вход: .Groups [1] .Value дает адреса изображения ??? – Mkan

+1

'данные: = [] байт (строка (содержимое))' ' читателя: = bytes.NewReader (данные)' \t \t 'декодер: = xml.NewDecoder (считыватель)' \t \t 'decoder.CharsetReader = кодировка .NewReader' \t \t 'err = decoder.Decode (& dat)' Я декодирую его вот так – Kalina

Смежные вопросы