【问题标题】:Regexp to find images in html (golang)正则表达式在 html (golang) 中查找图像
【发布时间】:2016-08-26 05:59:46
【问题描述】:

我正在解析来自几个不同来源的 xml rss 提要,我想在 html 中查找图像。

我做了一些研究,发现了一个我认为可能有效的正则表达式

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

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

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

有什么想法吗?

【问题讨论】:

  • 要获得未转义的字符串,请使用反引号。示例:`mystring`

标签: regex xml string go escaping


【解决方案1】:

使用适当的 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

【讨论】:

    【解决方案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 类型的 a。

    阅读文档;

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

    通过 Xpath 定义 RegX 解析很好,但分组 ext。问题使工作变得复杂

    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
    

    问候。

    【讨论】:

    • 非常感谢!我已经用不同的包解析了我的 xml,但我想我可以使用它在 xml 的描述标签中找到 imgs(用 html 编写)?
    • 那么,那个包是什么? regexstorm.net/tester 我的模式是: 输入是: .Groups[1].Value 给出图片地址???
    • data :=[]byte(string(contents))reader := bytes.NewReader(data)decoder := xml.NewDecoder(reader)decoder.CharsetReader = charset.NewReadererr = decoder.Decode(&amp;dat)我这样解码
    • 这个答案的语言有误,问题是关于 Go 而不是 C#。
    • 啊,抱歉,之前没有使用 Go,但这似乎可行。尝试tour.golang.org/welcome/1 package main import ("fmt" "regexp") func main() { var myString = &lt;img src='img1single.jpg'&gt;&lt;img src="img2double.jpg"&gt; var myRegex = regexp.MustCompile(&lt;img[^&gt;]+\bsrc=["']([^"']+)["']) var imgTags = myRegex.FindAllStringSubmatch(myString, -1) out := make([]string, len(imgTags)) for i := range out { fmt.Println(imgTags[i][1]) } }
    猜你喜欢
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多