Expresión regular para obtener el SRC de imágenes en C#
regex image (8)
Aquí está el que yo uso:
<img.*?src/s*?=/s*?(?:([''"])(?<src>(?:(?!/1).)*)/1|(?<src>[^/s>]+))[^>]*?>
Lo bueno es que coincide con cualquiera de los siguientes:
<img src=''test.jpg''>
<img src=test.jpg>
<img src="test.jpg">
Y también puede coincidir con algunos escenarios inesperados como atributos adicionales, por ejemplo:
<img src = "test.jpg" width="300">
Estoy buscando una expresión regular para aislar el valor src de un img. (Sé que esta no es la mejor manera de hacer esto, pero esto es lo que tengo que hacer en este caso)
Tengo una cadena que contiene código HTML simple, algo de texto y una imagen. Necesito obtener el valor del atributo src de esa cadena. Solo he logrado aislar toda la etiqueta hasta ahora.
string matchString = Regex.Match(original_text, @"(<img([^>]+)>)").Value;
Esto debería capturar todas las etiquetas img y solo la parte src, sin importar dónde se encuentre (antes o después de la clase, etc.) y es compatible con html / xhtml: D
<img.+?src="(.+?)".+?/?>
Esto es lo que uso para sacar las etiquetas de las cadenas:
</? *img[^>]*>
Intenté lo que Francisco Noriega sugirió, pero parece que la API de HtmlAgilityPack ha sido alterada. Así es como lo resolví:
List<string> images = new List<string>();
WebClient client = new WebClient();
string site = "http://www.mysite.com";
var htmlText = client.DownloadString(site);
var htmlDoc = new HtmlDocument()
{
OptionFixNestedTags = true,
OptionAutoCloseOnEnd = true
};
htmlDoc.LoadHtml(htmlText);
foreach (HtmlNode img in htmlDoc.DocumentNode.SelectNodes("//img"))
{
HtmlAttribute att = img.Attributes["src"];
images.Add(att.Value);
}
La expresión regular que desee debe estar en la línea de:
(<img.*?src="([^"])".*?>)
Espero que esto ayude.
Sé que dices que tienes que usar expresiones regulares, pero si es posible realmente le daría una oportunidad a este proyecto de código abierto: HtmlAgilityPack
Es muy fácil de usar, lo acabo de descubrir y me ayudó mucho, ya que estaba haciendo un análisis de HTML más pesado. Básicamente te permite usar XPATHS para obtener tus elementos.
Su página de ejemplo está un poco desactualizada, pero la API es realmente fácil de entender, y si está un poco familiarizado con xpaths, tendrá una idea general en este momento.
El código para su consulta se vería así: (código no compilado)
List<string> imgScrs = new List<string>();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlText);//or doc.Load(htmlFileStream)
var nodes = doc.DocumentNode.SelectNodes(@"//img[@src]"); s
foreach (var img in nodes)
{
HtmlAttribute att = img["src"];
imgScrs.Add(att.Value)
}
También puede usar una mirada hacia atrás para hacerlo sin necesidad de sacar un grupo.
(?<=<img.*?src=")[^"]*
recuerda escapar de las citas si es necesario
string matchString = Regex.Match(original_text, "<img.+?src=[/"''](.+?)[/"''].*?>", RegexOptions.IgnoreCase).Groups[1].Value;