Regexp在html(golang)中查找图像

时间:2016-05-01 11:18:06

标签: regex xml string go escaping

我正在从几个不同的来源解析xml rss feed我希望在html中找到这些图片。

我做了一些研究,我找到了一个我认为可行的正则表达式

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

但我在使用它时遇到了麻烦。它给了我错误,因为我不知道如何使用该表达式进行搜索。

我尝试将它作为一个字符串使用,它不能用单引号或双引号正确转义。我尝试使用它就像那样,裸露,它给了我一个错误。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用正确的html解析器总是更好地解析html,但是廉价/ hackish正则表达式也可以正常工作,这是一个例子:

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 :(得分:-2)

啊,对不起,之前没有和Go一起工作,但这似乎有效。 试着

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类型。

阅读文件;

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

按Xpath定义解析RegX很好但是组分机。问题使工作复杂化

doc.DocumentNode.SelectSingleNode(XPath here)      

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

等。

我建议这看起来似乎rss提供一些HTML内容;) 所以得到xml, 使用XMLDoc解析获取所需的html内容 然后通过这个获得所有图像。 对于公开回答。

评论后,我认为需要正则表达式; 我的模式是

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

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

结果似乎很好 在.net中你必须通过foreach来获取

.Groups[1].Value

问候。