上边的表达式是 
(?s){datalist(\s+linktype=""(? <linktype>[^""\{\}](.*?))"")?(\s+showtype=""(? <showtype>[^""\{\}](.*?))"")?([\s\}]{1})(? <fieldall>(.*?)){/datalist} 

解决方案 »

  1.   


    //试试看
    String str = @"{datalist   linktype="""" showtype=""10"" }";
    str = str.Trim();
    Regex objRegex2 = new Regex(@"(?ins)^{datalist\s+((showtype=""(?<showtype>[^}]*)""\s+linktype=""(?<linktype>[^}]*)"")|(linktype=""(?<linktype>[^}]*)""\s+showtype=""(?<showtype>[^}]*)"")) \s*}$");
    Match objMatch1 = objRegex2.Match(str);
    if (objMatch1.Success) {
    //这个就是你要的 objMatch1.Result("${showtype}"), objMatch1.Result("${linktype}")
    }  
      

  2.   


    //试试看
    String str = @"{datalist   linktype="""" showtype=""10"" }";
    str = str.Trim();
    Regex objRegex2 = new Regex(@"(?ins)^{datalist\s+((showtype=""(?<showtype>[^}]*)""\s+linktype=""(?<linktype>[^}]*)"")|(linktype=""(?<linktype>[^}]*)""\s+showtype=""(?<showtype>[^}]*)"")) \s*}$");
    Match objMatch1 = objRegex2.Match(str);
    if (objMatch1.Success) {
    //这就是你要的 objMatch1.Result("${showtype}"), objMatch1.Result("${linktype}")
    }  
      

  3.   

    try...
    MatchCollection mc = Regex.Matches(yourStr, @"(?is)\{datalist(?=[^{}]*showtype=""(?<showtype>[^""]*)"")[^{}]*linktype=""(?<linktype>[^""]*)""[^{}]*\}(?<fieldall>(?:(?!\{/datalist}).)*)\{/datalist\}");
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["showtype"].Value + "\n";
        richTextBox2.Text += m.Groups["linktype"].Value + "\n";
        richTextBox2.Text += m.Groups["fieldall"].Value + "\n";
    }