任意长度的非空字符串
替换为:只保留最后四位可见,其余全替换为符号*
如果字符串本身长度小于四位,则全部替换为* 或者不替换(二选一皆可)正则表达式能否实现?
且不能用IF等逻辑语句来判断。谢谢!

解决方案 »

  1.   

    替换为一个* 我到可以一个正则就OK 如果是前面的字符全部为* 一个正则实现 没想出来
    替换为一个*的:
    正则:([\s\S]+)([\s\S]{4})
    替换的:*$2
    测试:
    源:ad1啊没能理解我的撒@a87945s---得到:*945s
    源:ad11--------得到ad11
    源:ad1---------得到ad1
      

  2.   


            string CapText(System.Text.RegularExpressions.Match m)
            {
                string x = m.ToString();
                x = x.Substring(x.Length - 4, 4).PadLeft(x.Length, '*');
                return x;
            }
            private void button1_Click(object sender, EventArgs e)        
            {            System.IO.StreamReader reader = new System.IO.StreamReader("e:\\1.txt",Encoding.Default);
                string str = @"abdefg";
                string strmatch = @"(?is)([0-9a-z]+)[0-9a-z]{4}$";
                System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(strmatch);
                System.Text.RegularExpressions.Match m = reg.Match(str);
                str = reg.Replace(str, CapText);
                MessageBox.Show(str);
            }
      

  3.   

    void Main()
    {
    string str="任意长度的非空字符串";
    str=Regex.Replace(str,"(.*)(.{4})$",m=>new string('*',m.Length)+m.Groups[2].Value);
    Console.WriteLine(str);  //**********空字符串
    }
      

  4.   

     List<string> _list = new List<string>() { 
                    "1",
                    "22",
                    "333",
                    "4444",
                    "55555",
                    "666666"
                };
                _list = _list.Select(a => Regex.Replace(a, @"(?(^[\s\S]{1,4}$)|^[\s\S]*?(?=[\s\S]{4}$))", b =>  Regex.Replace(b.Value, @"[\s\S]", "*"))).ToList();
                /*
                 *  [0] "1" string
    [1] "22" string
    [2] "333" string
    [3] "4444" string
    [4] "*5555" string
    [5] "**6666" string             */
      

  5.   


     string sourcesrtr = "fdasdfsafdsa324";
                Match mi = Regex.Match(sourcesrtr, @"([\s\S]+?)(?:[\s\S]{4}$)");
                if(mi.Success)
                {
                    string starstr="";           
                    sourcesrtr = Regex.Replace(sourcesrtr, @"([\s\S]+?)(?=[\s\S]{4}$)", starstr.PadLeft(mi.Groups[1].Value.Length,'*'));
                }
      

  6.   

    在5楼的基础上改的。可以用
    void Main()
    {
        string str="任意长度的非空字符串";
        str=Regex.Replace(str,"(.+)(.{4})$",m=>new string('*',m.Length-4)+m.Groups[2].Value);
        Console.WriteLine(str);  //**********空字符串
    }