规则:如果元素中有.则把此元素用""包住,如果有双引号则用2个双引号代替,并最后用""包围元素。
如s.s则为"s.s","s则为"""s","s"则为"""s""",a."s则为"a.""s"以下为3行(用;分行)共6给元素按以上规则组成的字符串,请对它进行分割(求正则表达式)。
a.b;"c1.c2".d;"d0""d1""".e;如先按;区分成3行,再按.把每行分成2列(假设每列内容不含有;号)。也就是一个s[3][2]的数组。分割后:
s[0][0]=a;s[0][1]=b
s[1][0]=c1.c2;s[0][1]=d
s[2][0]=d0"d1";s[2][1]=e

解决方案 »

  1.   

    你究竟要替换还是要分割
    string test = "a.b;\"c1.c2\".d;\"d0\"\"d1\"\"\".e;";
    Regex reg = new Regex(@"([^;]+);");
    string result = reg.Replace(test, delegate(Match m) {return "\"" + m.Groups[1].Value.Replace("\"", "\"\"") + "\";"; });
    richTextBox2.Text = result;
    /*------输出------
    "a.b";"""c1.c2"".d";"""d0""""d1"""""".e";
    */
      

  2.   

    string s= "\"s";
    s = "\""+Regex.Replace(s,"\"|[^\"]",m=>m.Value=="\""?"\"\"":m.Value)+"\"";
      

  3.   

    可能表达不清,要么我换一种说法吧,就是将
    a.b."c1.c2"."d""d0""d"
    分割成
    a
    b
    c1.c2
    d"d0"d按.分割,但.也有可能是元素的一部分
      

  4.   

    foreach(Match m in Regex.Matches(s,@"(([^"]|"[^"]*")+?)(\.|$)"))
    {
        TextBox1.AppendText(m.Groups[1].Value+Environment.NewLine);
    }
      

  5.   

    foreach(Match m in Regex.Matches(s,@"(([^""]|""[^""]*"")+?)(\.|$)"))
    {
        TextBox1.AppendText(m.Groups[1].Value+Environment.NewLine);
    }
      

  6.   


    string test = "a.b.\"c1.c2\".\"d\"\"d0\"\"d\"";
    Regex reg = new Regex("(?n)\"(?<o>(\"\"|[^\"])*)\"|(?<o>[^.\"]+)");
    MatchCollection mc = reg.Matches(test);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["o"].Value + "\n";
    }
    /*-----输出------
    a
    b
    c1.c2
    d""d0""d
    */最后一种情况,不能直接得到d"d0"d,需要进行源字符串的预处理,或者结果的二次处理,把""替换为"