我正在从几个不同的来源解析xml rss feed我希望在html中找到这些图片。
我做了一些研究,我找到了一个我认为可行的正则表达式
/<img[^>]+src="?([^"\s]+)"?\s*\/>/g
但我在使用它时遇到了麻烦。它给了我错误,因为我不知道如何使用该表达式进行搜索。
我尝试将它作为一个字符串使用,它不能用单引号或双引号正确转义。我尝试使用它就像那样,裸露,它给了我一个错误。
有什么想法吗?
答案 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
}
答案 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
问候。