分别获取src或alt是没有问题的,但是如何在每个具有组名的同时获得两者.
我们必须记住,alt可以在src的左侧或右侧.
我赶时间,所以我找到了一个快速解决方案,为src和alt创建了3个组名.我知道我们可以做得更好.
private void GetFirstImage(string newHtml, out string imgstring, out string imgalt)
{
imgalt = "";
imgstring = "";
string pattern = "(?<=<img(?<name1>\\s+[^>]*?)src=(?<q>['\"]))(?<url>.+?)(?=\\k<q>)(?<name2>.+?)\\s*\\>";
try
{
//si hay imagen
if (Regex.IsMatch(newHtml, pattern))
{
Regex r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
imgstring = r.Match(newHtml).Result("${url}");
string tempalt = "", tempalt2;
tempalt = r.Match(newHtml).Result("${name1}");
tempalt2 = r.Match(newHtml).Result("${name2}");
//ya tenemos la ruta de la imagen y de lo que aparece a izq y a derecha dentro de <img>
try
{
pattern = "alt=(?<q>['\"])(?<alt>.+?)(?=\\k<q>)";
//si hay algo que no sea vacío a la izquierda de la ruta
if(!String.IsNullOrEmpty(tempalt.Trim()))
{
r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
//si cumple con el pattern para buscar el alt
if (Regex.IsMatch(tempalt, pattern))
{
imgalt = r.Match(tempalt).Result("${alt}");
}
}
//si no se encontró el alt y hay algo a la derecha
if(String.IsNullOrEmpty(imgalt) && !String.IsNullOrEmpty(tempalt2.Trim()))
{
r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
//si se cumple el patrón del alt
if (Regex.IsMatch(tempalt2, pattern))
{
imgalt = r.Match(tempalt2).Result("${alt}");
}
}
}
catch{ }
}
}
catch{}
}
Run Code Online (Sandbox Code Playgroud)