Regex reg = new Regex(@"(?i)\b(?!.*?matrix.*?).+\b");

解决方案 »

  1.   

            private void button1_Click(object sender, EventArgs e)
            {
                string yourStr = @"1Form2MenuOldUID:
      1Form3MenuOldUID:
      1Form3MenuOLdUID:
      1Form1MatrixOldUID:
      2Form2MenuNewUID:
      2Form3MenuOldUID:
      2Form3MenuOLdUID:
      2Form1MatrixOldUID:
    ";
                Regex reg = new Regex(@"(?i)\b(?!.*?matrix.*?).+\b");
                MatchCollection mc = reg.Matches(yourStr);
                foreach (Match m in mc)
                {
                    MessageBox.Show(m.Value);
                }
            }
      

  2.   

    提取?也就是说楼主举例的数据是一个整体?//提取
    string FormIndex = Regex.Escape(textBox1.Text);
    string Field = Regex.Escape(textBox2.Text);
    Regex reg = new Regex(@"(?is)" + FormIndex + @"Form\d+((?!Matrix|" + Field + @").)*" + Field + @":");
    MatchCollection mc = reg.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n";
    }
      

  3.   

    这样,没问题的。按行匹配,识别大小写Regex reg = new Regex(@"(?m)^\s*"+FormIndex + @"Form\d+(?!Matrix)\w*" + Field + ":\r$");
      

  4.   

    (@"(?m)^\s*"+FormIndex 这里的写法有的疑问
     假如1Form2MenuOldUID:
         21Form2MenuOldUID:
        311Form2MenuOldUID:
    当FormIndex是1的时候,我只需要1Form2MenuOldUID,而不需要21Form2MenuOldUID:,  311Form2MenuOldUID。因为以21或者311开头的string不是我所想要的。
    这样情况要怎么写呢?用\b来限定么?
      

  5.   

    string FormIndex = Regex.Escape(textBox1.Text);
    string Field = Regex.Escape(textBox2.Text);
    Regex reg = new Regex(@"(?is)\b" + FormIndex + @"Form\d+((?!Matrix|" + Field + @").)*" + Field + @":");
    MatchCollection mc = reg.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n";
    }