要替换文本中的特定字符串,但是当这个特定字符串包含在""中时不去替换。
如:有文本 
  编码 + "编码" + "haha"
要将 编码 替换为 Code ,期望的结果为
  Code + "编码" + "haha"如何实现呢? 谢谢!

解决方案 »

  1.   

    using System.Text.RegularExpressions;// 正则表达式对象
    Regex re = new Regex(@"[^\""]编码[^\""]");// 替换
    string oldstr = "your string";string newstr = re.Replace(oldstr, "replace to");
      

  2.   

    用一个很烂的方法,不用正则:string str = "编码 + \"编码\" + \"haha\"";
    str = str.Replace("\"编码\"", "靠,这叫temp!!!");
    str = str.Replace("编码", "code");
    str = str.Replace("靠,这叫temp!!!", "\"编码\"");
    Console.WriteLine(str);
      

  3.   

    偶是菜鸟,帖个你凑合看看。
                string strSrc = "编码 + \"编码\" + \"haha\"";
                string strRegex = "([^\"]|^)编码[^\"]";
                MessageBox.Show(Regex.Replace(strSrc, strRegex, "Code"));
      

  4.   

    编码 + "编码" + "haha"
    要将 编码 替换为 Code ,期望的结果为
      Code + "编码" + "haha"
    用过正则吗?
    到下面这里看一下
    http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
      

  5.   

    to wuyazhe:
    你那个会把前后各一个字符也替换掉的这个要用否定式向后查看和向前查看,这样string strSrc = "编码 + \"编码\" + \"haha\"";
    string strRegex = "(?!<\")编码(?!\")";
    MessageBox.Show(Regex.Replace(strSrc, strRegex, "Code"));
      

  6.   

    别忘了
    using System.Text.RegularExpressions;
      

  7.   

    贴一段正则教程吧向前查看与向后查看  Perl 5 引入了两个强大的正则语法:“向前查看”和“向后查看”。他们也被称作“零长度断言”。他们和锚定一样都是零长度的(所谓零长度即指该正则表达式不消耗被匹配的字符串)。不同之处在于“前后查看”会实际匹配字符,只是他们会抛弃匹配只返回匹配结果:匹配或不匹配。这就是为什么他们被称作“断言”。他们并不实际消耗字符串中的字符,而只是断言一个匹配是否可能。几乎本文讨论的所有正则表达式的实现都支持“向前向后查看”。唯一的一个例外是Javascript只支持向前查看。· 肯定和否定式的向前查看  如我们前面提过的一个例子:要查找一个q,后面没有紧跟一个u。也就是说,要么q后面没有字符,要么后面的字符不是u。采用否定式向前查看后的一个解决方案为<<q(?!u)>>。否定式向前查看的语法是<<(?!查看的内容)>>。  肯定式向前查看和否定式向前查看很类似:<<(?=查看的内容)>>。  如果在“查看的内容”部分有组,也会产生一个向后引用。但是向前查看本身并不会产生向后引用,也不会被计入向后引用的编号中。这是因为向前查看本身是会被抛弃掉的,只保留匹配与否的判断结果。如果你想保留匹配的结果作为向后引用,你可以用<<(?=(regex))>>来产生一个向后引用。·  肯定和否定式的先后查看  向后查看和向前查看有相同的效果,只是方向相反  否定式向后查看的语法是:<<(?<!查看内容)>>  肯定式向后查看的语法是:<<(?<=查看内容)>>  我们可以看到,和向前查看相比,多了一个表示方向的左尖括号。例:<<(?<!a)b>>将会匹配一个没有“a”作前导字符的“b”。值得注意的是:向前查看从当前字符串位置开始对“查看”正则表达式进行匹配;向后查看则从当前字符串位置开始先后回溯一个字符,然后再开始对“查看”正则表达式进行匹配。
      

  8.   

    to zhqs1000(子鱼) &  wuyazhe(经常答错,欢迎指正。) 前后加[^\"]是不对的
    方括号表示字符集,^表示取反,[^\"]表示一个非双引号字符
    会把前后各一个字符替换掉的
      

  9.   

    Regex.Replace("编码f f+ \"编码\" + \"haha\" 编码", "([^\"]|^)编码([^\"]|$)", "$1zz$2", RegexOptions.IgnoreCase)来个不用预匹配的:-)
      

  10.   

    您可以试试以下方式:
    string sourceString = @"编码 + ""编码"" + ""haha""";
    string pattern = @"[^""][\u4e00-\u9fa5][^""]";
    string result = System.Text.RegularExpressions.Regex.Replace(sourceString,pattern,@"code");
    WL(result);//输出
      
    //////////////////////////////////////////////
    MSN:[email protected]请给我一个与您交流的机会!
      

  11.   

    楼主如果这样情况怎么替换?编码 + "编码 编码 编码" + "ha 编码 ha"
      

  12.   

    谢:viena() 维也纳() 提醒
    偶了解了。
    学习了。
      
    //////////////////////////////////////////////
    MSN:[email protected]请给我一个与您交流的机会!
      

  13.   

    楼主如果这样情况怎么替换?编码 + "编码 编码 编码" + "ha 编码 ha"-------------------------------------
    如果之替换外面的话Regex.Replace("编码 + \"编码 编码 编码\" + \"ha 编码 ha\"", @"((^|"")[^""]*($|""))", new MatchEvaluator(regs), RegexOptions.IgnoreCase)public string regs(Match m)
    {
           return m.ToString().Replace("编码", "zz");
    }
      

  14.   

    str.Replace("编码","编码编码").Replace("\"编码编码\"","\"编码\"").Replace("编码编码","Code");^_^
      

  15.   

    /* 编码 "编码"*/ 编码 + @"编码 ""编码 编码" + "ha \"编码 ha"; //编码 "晕楼主这个又怎么替换?楼主失踪了?...
      

  16.   

    你刚才讲的很正确。我下面写的请看看有什么问题没有?谢谢
    string sourceString = @"编码 + ""编码"" + ""haha""";
    string pattern = @"([^""])(?<name>[\u4e00-\u9fa5])([^""])";
    string result = System.Text.RegularExpressions.Regex.Replace(sourceString,pattern,@"$1${name}$2");
    WL(result);//输出
      
    //////////////////////////////////////////////
    MSN:[email protected]请给我一个与您交流的机会!
      

  17.   

    /* 编码 "编码"*/ 编码 + @"编码 ""编码 编码" + "ha \"编码 ha"; //编码 "晕楼主这个又怎么替换?楼主失踪了?...
    ---------------------------
    如果只替换引号外面的 我那个依然可以完成:-)
      

  18.   

    这样替换:
    private void Replace2(ref string Content, string FindString, string NewString)
    {
    Content = Content.Replace(FindString, NewString);
    Content = Content.Replace("\""+NewString+"\"","\""+FindString+"\"");
    }例如,这个字符串:代码 "代码" 注释
    将“代码”替换为“源代码”
    第一步:全部替换,字符串变成了 源代码 "源代码" 注释
    第二步:将"源代码"替换回来,变成"代码",这就变成了 源代码 "代码" 注释
      

  19.   

    public void replace(int i,string[] oldstring,int[] postion,string newstring ,string yushi,string tihuan)
        {
            string a = yushi;//"bcjjbcjabcdwbcwabccdf"; 
         
            int a1 = a.IndexOf("a");
            int b1 = a.IndexOf("d");
            if(a1==-1||b1==-1)
            {
            string newed=yushi.Replace (tihuan,newstring);
                ok(oldstring ,postion ,newed,i );
                return;
            }
            string s=a.Substring(a1,b1-a1+1);
            oldstring [i]=s;
            postion [i]=a1;
            yushi=a.Remove (a1,b1-a1+1);
            i++;
            replace (i,oldstring ,postion ,newstring ,yushi ,tihuan );
        }
        public void ok(string[] a, int[] p, string zz,int j)
        {
        
            for (int i =j-1; i >=0; i--)
            {
                int f1 = Convert.ToInt32 (p[i]);
                string fs = a[i].ToString();
                zz=zz.Insert(p[i], a[i].ToString());
            }
            this.Response.Write(zz);
         
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            int ii = 0;
            string[] ss=new string [100];
            int[] jj=new int [100];
            string news="55";
            string yushi="bcjjbcjabcdwbcwabccdf";
            string th="bc";
          
            replace(ii, ss, jj, news, yushi, th);
    }
    需要自己修改一下