要求:现在有一个标签字符串 如下 {dede: typeid=1 size="8" length='10'}
<li >aaaaaaaaaaa</li>
{/dede}
我的代码如下: 
string typeid;string size;string length;
如果上面的html代码里面的typeid=1 我定义的typeid的值也是1 
注意:typeid=1    typeid="1"  typeid='1' 截取的结果都是1 ,size,length其他同理!如果html代码如下 {dede: typeid=1 size="8"}
<li >aaaaaaaaaaa</li>
{/dede}得到的结果将是: 
string typeid="1";
string size="8"
string length=null;如果html代码如下 {dede: typeid=1}
<li >aaaaaaaaaaa</li>
{/dede}得到的结果将是: 
string typeid="1";
string size=null;
string length=null;
既:哪个不出现在标签中 哪个的值就为null! 可以随意一个不出现在标签中!!而且{dede: typeid=1 size="8" length='10'}
<li >aaaaaaaaaaa</li>
{/dede}和
{dede: asdf typeid=1 askdfjsdk size="8" 任意字符 length='10'}
<li >aaaaaaaaaaa</li>
{/dede}
的结果是一样的 意思是 在typeid  size  length中间任意加上一个或者多个字符
{dede: typeid=1 size="8" length='10'}
<li >aaaaaaaaaaa</li>
{/dede}和
{dede: length='10' size="8" typeid=1 }
<li >aaaaaaaaaaa</li>
{/dede}的结果是一样的  意思是typeid  length  size的顺序自由变化 结果一样!
高手给个example这样的功能如果做到呢?给个example....

解决方案 »

  1.   

    size=[^\d]*(?<size>\d*)
    取得size组
    其他同理
      

  2.   


                string input = ""; //输入的字符串
                string pTypeID = @"typeid=['""\s]?(\d*)['""\s]"; //其他两个只要用size和length替换typeid就行了
                string typeid = null;
                Match m = Regex.Match(input, pTypeID, RegexOptions.IgnoreCase);
                if (m.Success)
                    typeid = m.Groups[1].Value;
      

  3.   

                string s=@"{dede: typeid=1 size=""8"" length='10'}\r\n <li >aaaaaaaaaaa</li>\r\n  {/dede}";
                Regex a = new Regex(@"size=[^\d]*(?<size>\d*)");
                Match b=a.Match(s);
                MessageBox.Show(b.Groups["size"].ToString());
      

  4.   


    恩 这个可以实现了  如果再加一条 typeid size length不区分大小写 正则应该怎么写?
      

  5.   

    RegexOptions.IgnoreCase就已经是不区分大小写了
      

  6.   

    哦 谢谢了 如果再截取里面的html代码<li >aaaaaaaaaaa</li>呢?
      

  7.   

    alifriend 和 watsonchia 已经能正常获得标题的要求了
    但是 如果再获得里面的html代码<li >aaaaaaaaaaa </li>  不知道怎么获得...
      

  8.   

    取<li >aaaaaaaaaaa </li>全部还是里面的内容?
      

  9.   

                string s=@"{dede: typeid=1 size=""8"" length='10'}\r\n <li>aaaaaaaaaaa</li>\r\n  {/dede}";
                Regex a = new Regex(@"\<li\>(?<size>[^<]*)\</li\>");
                Match b=a.Match(s);
                MessageBox.Show(b.Groups["size"].ToString());
      

  10.   


    string strContent = @"{dede: typeid=1 size=" + "\"8\" " + @"}
    <li >aaaaaaaaaaa</li>
    {/dede}";
                    string typeid = ""; string size = ""; string lenght = "";
                    Regex re = new Regex(@"(?si){dede:(\s*typeid=.*?(?<typeid>\d+))*(\s*size=.*?(?<size>\d+))*([^\s]*\s*lenght=.*?(?<lenght>\d+))*.*?(?:{/dede})");
                    foreach (Match m in re.Matches(strContent))
                    {
                        if (m.Groups["typeid"] != null)
                        {
                            typeid = m.Groups["typeid"].Value.Trim();
                        }
                        if (m.Groups["size"] != null)
                        {
                            size = m.Groups["size"].Value.Trim();
                        }
                        if (m.Groups["lenght"] != null)
                        {
                            lenght = m.Groups["lenght"].Value.Trim();
                        }
                    }
    修改为三个都可以不存在,测试一下
      

  11.   

    如果中间还可以加内容:{dede: asdf typeid=1 askdfjsdk size="8" 任意字符 length='10'}
    <li >aaaaaaaaaaa</li>
    {/dede}正则修改为下(?si){dede:(.*?(typeid=).*?(?<typeid>\d+))*(.*?(size=).*?(?<size>\d+))*(.*?(length=).*?(?<length>\d+))*.*?(?:{/dede})
    注意你的length和lenght
      

  12.   

    求败,你写的受字符受顺序的影响吗?就是typeid,size ,lenght 的顺序
      

  13.   


    我把strContent修改后无法获得
    我修改成了string strContent = "{dede: afasf  typeid=1 爱上对方size=\"8\" length='10'}"
      + "<li >aaaaaaaaaaa</li>"
      + "{/dede}";注意下题目要求...
    现在也不知道如何 获得<li >aaaaaaaaaaa</li>?
      

  14.   

    在请教一下(?is)和(?si)有区别吗?不区分大小写?单行模式?
      

  15.   


    全部内容
    如果再定义一个变量string htmlContent的话,htmlContent的值为“ <li >aaaaaaaaaaa </li>”;
      

  16.   


    string strContent = @"{dede: asdf typeid=1 askdfjsdk size=" + "\"8\""+ @"任意字符 length='10'}
    <li >aaaaaaaaaaa</li>
    {/dede}
    ";
                    string typeid = ""; string size = ""; string lenght = ""; string li = "";
                    Regex re = new Regex(@"(?is){dede:(?=(.*?size=.*?(?<size>\d+))*)(?=(.*?typeid=.*?(?<typeid>\d+))*)(?=(.*?length=.*?(?<length>\d+))*).*?<li[^>]*>(?<li>.*?(?=</li>)).*?{/dede}");
                    foreach (Match m in re.Matches(strContent))
                    {
                        if (m.Groups["typeid"] != null)
                        {
                            typeid = m.Groups["typeid"].Value.Trim();
                        }
                        if (m.Groups["size"] != null)
                        {
                            size = m.Groups["size"].Value.Trim();
                        }
                        if (m.Groups["lenght"] != null)
                        {
                            lenght = m.Groups["lenght"].Value.Trim();
                        }
                        if (m.Groups["li"] != null)
                        {
                            li = m.Groups["li"].Value.Trim();
                        }
                    }
    你试试
      

  17.   

    修改一下,获取的li内容为htmlContent的值为“ <li >aaaaaaaaaaa </li>”;(?is){dede:(?=(.*?size=.*?(?<size>\d+))*)(?=(.*?typeid=.*?(?<typeid>\d+))*)(?=(.*?length=.*?(?<length>\d+))*).*?(?=<li)(?<li><li.*?</li>).*?{/dede}将该正则替换一下上面的就ok了
      

  18.   


                string input = "{dede: afasf  typeid=1 爱上对方 length='10'size=\"8\" }"
      + "<li >aaaaaaaaaaa</li>"
      + "{/dede}";;            string typeid = null; 
                string size = null; 
                string length = null;            MatchCollection mc = Regex.Matches(input, @"(?i)(typeid|size|length)=['""]?([^'""\s}]+)['""]?");
                foreach (Match m in mc)
                {
                    switch (m.Groups[1].Value.ToLower())
                    {
                        case "typeid":
                            typeid = m.Groups[2].Value;
                            break;
                        case "size":
                            size = m.Groups[2].Value;
                            break;
                        case "length":
                            length = m.Groups[2].Value;
                            break;
                        default:
                            break;
                    }
                }
                Console.WriteLine(typeid);
                Console.WriteLine(size);
                Console.WriteLine(length);Regex.Match(input, @"(?is)(?<=<li\s*>).*?(?=</li>)");