Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Regex,我需要改进一种从图像中获取src和alt的方法_C#_.net_Regex - Fatal编程技术网

C# Regex,我需要改进一种从图像中获取src和alt的方法

C# Regex,我需要改进一种从图像中获取src和alt的方法,c#,.net,regex,C#,.net,Regex,单独获取src或alt是没有问题的,但是如何能够同时获取具有组名的每个src或alt 我们必须记住,alt可以位于src的左侧或右侧 我很忙,所以我找到了一个快速的解决方案,为src和alt创建了3个组名。我知道我们可以做得更好 private void GetFirstImage(string newHtml, out string imgstring, out string imgalt) { imgalt = ""; imgstring = ""; string

单独获取src或alt是没有问题的,但是如何能够同时获取具有组名的每个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{}

}
private void GetFirstImage(字符串newHtml、out字符串imgstring、out字符串imgalt)
{
imgalt=“”;
imgstring=“”;

string pattern=“(?Simple…不要使用正则表达式。对于xhtml使用DOM解析器-so
XmlDocument
,对于(非x)HTML使用HTML敏捷包

然后只需查询
root.SelectNodes(“//img”)
并查看每个元素上的“src”和“alt”属性(即
node.attributes[“src”]。Value
等)


Regex不是解析html的好工具(因为它不是一个好工具)。

+1用于XmlDocument,我希望另一个+1用于重申Regex+html=BAD请不要使用。请尝试类似的方法。