string str= "一二三四“五”六七";
string[] arr ={"一","三","五"};
删除 arr 在 str 中的元素,但“”内的不删除

解决方案 »

  1.   


                string str = "一二三四“五”六七";
                string[] arr = { "一", "三", "五" };
                ArrayList array = new ArrayList(arr);
                for (int i = 0; i < str.Length; i++)
                {
                    for (int j = 0; j < array.Count; j++)
                    {
                        if (array[j].ToString() == str[i].ToString())
                        {
                            if (i > 0 && str[i - 1].ToString() == "“" && str[i + 1].ToString() == "”")
                                continue;
                            array.RemoveAt(j);
                        }
                    }
                }
                foreach (string s in array)
                    Response.Write(s);
    //只会循环判断,等待牛人更好的方法
      

  2.   

    正则替换也可以的吧
    string str= "一二三四“五”六七";
    str = Regex.Replace(str,
                  string.Format("[{0}]", Regex.Escape(string.Join(string.Empty, arr))),
                  string.Empty);
    没测试
      

  3.   

    引号的否定条件要带上
    string.Format("?<!“[{0}]?!”", Regex.Escape(string.Join(string.Empty, arr))),
      

  4.   


    void Main()
    {
    string str= "一二三四“五”六七";
    string[] arr =new string[]{"一","三","五"};
    var list=new List<string>();
    foreach(Match m in Regex.Matches(str,@"(?<=[""“])[^""“]+(?=[""”])"))
    {
    list.Add(m.Value);

        arr=arr.Except(str.ToCharArray().Select(s=>s.ToString()).Except(list)).ToArray();
        arr.ToList().ForEach(a=>Console.WriteLine(a)); //五}