我想用正则表达式提取{}和""的相关字符
规则:
""只能在{}内有效,例如:32sf"sdc"sc  无效 , {"fdskj"} 有效
{}不能在""内,例如: {"sfd{xx{xx{xx}}x}dfs"}    在""内都无效  查询字符:
sdfk{111}kjfsx{"123"}kxf{"{234}"}sc"{294}"dfgd{"{3sf{dss}}"}
查询{}:{111}、{"123"}、{"{234}"}、{"{3sf{dss}}"}
查询"":123、{234}、{3sf{dss}}
谢谢!

解决方案 »

  1.   


    void Main()
    {
     string s=@"sdfk{111}kjfsx{""123""}kxf{""{234}""}sc""{294}""dfgd{""{3sf{dss}}""}"; foreach(Match m in Regex.Matches(s,@"{""(.*?)""}"))
    {
        Console.WriteLine(m.Groups[1].Value);
     
    }

    /*
    123
    {234}
    {3sf{dss}}
    */
    }
      

  2.   


    //查询{} 处理比较麻烦
    void Main()
    {
     string s=@"sdfk{111}kjfsx{""123""}kxf{""{234}""}sc""{294}""dfgd{""{3sf{dss}}""}";
       s=s.Replace("\"{","#").Replace("}\"","@");
      
    foreach(Match m in Regex.Matches(s,@"{[\s\S]*?}"))
    {
        Console.WriteLine(m.Value.Replace("#","\"{").Replace("@","}\""));
    }

    }
      

  3.   

    这要看你的源字符串的复杂程度了,比如以你现在给的例子,查询{}string test = "sdfk{111}kjfsx{\"123\"}kxf{\"{234}\"}sc\"{294}\"dfgd{\"{3sf{dss}}\"}";
    Regex reg = new Regex(@"(?<!""){(?:""[^""]*""|[^{}])*}(?!"")");
    MatchCollection mc = reg.Matches(test);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n";
    }
    /*-------输出---------
    {111}
    {"123"}
    {"{234}"}
    {"{3sf{dss}}"}
    */如果不满足要求,具体描述规则或给出能覆盖所有情况的例子