Estou procurando uma expressão regular para isolar o valor src de um img. (Eu sei que esta não é a melhor maneira de fazer isso, mas é o que tenho que fazer neste caso)
Eu tenho uma string que contém código html simples, algum texto e uma imagem. Preciso obter o valor do atributo src dessa string. Eu consegui apenas isolar a tag inteira até agora.
string matchString = Regex.Match(original_text, @"(
]+)>)").Value;
string matchString = Regex.Match(original_text, "", RegexOptions.IgnoreCase).Groups[1].Value;
Eu sei que você diz que tem que usar o regex, mas se possível, eu daria a chance a este projeto de código aberto: HtmlAgilityPack
É realmente fácil de usar, eu acabei de descobrir e isso me ajudou muito, já que eu estava fazendo uma análise html mais pesada. Basicamente, permite usar o XPATHS para obter seus elementos.
Sua página de exemplo é um pouco desatualizada, mas a API é realmente fácil de entender, e se você estiver um pouco familiarizado com o xpaths, você terá uma noção disso agora
O código para sua consulta seria algo como isto: (código não compilado)
List imgScrs = new List (); 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) }
Eu tentei o que Francisco Noriega sugeriu, mas parece que a API do HtmlAgilityPack foi alterada. Aqui está como eu resolvi isso:
List images = new List (); 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); }
O regex que você quer deve estar na linha de:
()
Espero que isto ajude.
Isso deve capturar todas as tags img e apenas a parte src, não importa onde esteja localizada (antes ou depois da aula, etc.) e suporta html / xhtml: D
você também pode usar um olhar para trás para fazer isso sem precisar retirar um grupo
(?<=
lembre-se de fugir das citações, se necessário
Isso é o que eu uso para obter as tags de strings:
? *img[^>]*>
Aqui está o que eu uso:
(?:(?!\1).)*)\1|(?[^\s>]+))[^>]*?>
A parte boa é que corresponde a qualquer um dos abaixo:

E também pode corresponder a alguns cenários inesperados, como atributos extras, por exemplo:
