求一正则表达式,能去掉img 标签里的 width="xxx" alt="" 之类的属性,最后只剩下src属性
比如<img width="123" alt="" src="xxx.jpg" height="456" /> 替换后变成<img src="xxx.jpg" />

解决方案 »

  1.   

    去掉的一般有 width,height,style,alt 或许有时候还有其他的algin这些
      

  2.   

    不用正则:
    string s = "<img width='123' alt='' src='xxx.jpg' height='456' />";
    string result="";
    string[] items = s.Split(' ');
    for (int i = 0; i < items.Length; i++)
    if (items[i].IndexOf("src=") > -1)
    result = "<img " + items[i] + " />";
    div1.InnerText = result;
    }
      

  3.   

    dalmeeme 的解决方案让我眼前一亮,不过在一段html中,img标签可能不止一个。似乎还得要正则啊
      

  4.   

    不建议用正则,应该依赖DOM来处理。
      

  5.   

    把所有的img的src给取出来,放到<img src里面来
    js应该可以做把 没有做 感觉是没有问题的
      

  6.   

    没用正则,直接写了个算法:
    string s = "<img width='123' alt='' src='xxx.jpg' height='456' /><div></div><img alt='33' src='abc.gif'/><p>img src</p>";
    string result = "";
    int flag = 0,flagSrc=0;
    char[] c = s.ToCharArray();
    for (int i = 0; i < c.Length; i++)
    {
    if (flag == 0 && c[i] == '<')
    {
    flag = 1;
    continue;
    }
    if (flag == 1 && c[i] == 'i')
    {
    flag = 2; 
    continue;
    }
    if (flag == 2 && c[i] == 'm')
    {
    flag = 3;
    continue;
    }
    if (flag == 3 && c[i] == 'g')
    {
    flag = 4;
    continue;
    }
    if (flag == 4 && c[i] == ' ')
    {
    flag = 100;
    continue;
    }
    if (flag == 100 && c[i] == '/')
    {
    flag = 101;
    continue;
    }
    if (flag == 101 && c[i] == '>')
    {
    flag = 0;
    continue;
    }
    if (flag == 100 && c[i] == 's')
    {
    flagSrc = 1;
    continue;
    }
    if (flagSrc == 1 && c[i] == 'r')
    {
    flagSrc = 2;
    continue;
    }
    if (flagSrc == 2 && c[i] == 'c')
    {
    flagSrc = 3;
    continue;
    }
    if (flagSrc == 3 && c[i] == '=')
    {
    flagSrc = 100;
    continue;
    }
    if (flagSrc==100)
    {
    c[i-1]='=';
    c[i-2]='c';
    c[i-3]='r';
    c[i-4]='s';
    flagSrc = 101;
    }
    if (flagSrc == 101 && c[i] == ' ')
    {
    flagSrc = 0;
    continue;
    }
    if(flag==100&&flagSrc==0)
    c[i] = '\0';
    }
    result = new string(c);
    div1.InnerText = result;
      

  7.   

    楼上误会cfx的意思了其实正则也不过就是有穷状态机的一种实现
    只要明确了要处理字符串的规律,完全可以自己实现状态机,有时候运行效率会比正则高,只不过开发效率可能没有正则高罢了Regex reg = new Regex(@"(?i)<img[^>]*?(src=(['""]?)[^'""\s>]+\2)[^>]*>");
    string result = reg.Replace(yourStr, "<img $1>");
      

  8.   

    比如,上次有人问,不用循环,去搜索数据。
    有人给出了LINQ。其实LINQ内部还是循环。再比如,有人考虑实现一个ADO连接池,想法很好,不过这么做不会改善性能,为什么呢?因为底层人家已经实现了。我的意思是,对于所用的技术,知其然,更要知其所以然。
      

  9.   

    lxcnn 实现的最简洁,dalmeeme 最初的算法也提醒我们,有时可以从正则跳出来。
    结贴。