日期:2014-05-17  浏览次数:20954 次

求一替换正则表达式
任意长度的非空字符串
替换为:只保留最后四位可见,其余全替换为符号*
如果字符串本身长度小于四位,则全部替换为* 或者不替换(二选一皆可)

正则表达式能否实现?
且不能用IF等逻辑语句来判断。

谢谢!

------解决方案--------------------
替换为一个* 我到可以一个正则就OK 如果是前面的字符全部为* 一个正则实现 没想出来
替换为一个*的:
正则:([\s\S]+)([\s\S]{4})
替换的:*$2
测试:
源:ad1啊没能理解我的撒@a87945s---得到:*945s
源:ad11--------得到ad11
源:ad1---------得到ad1
------解决方案--------------------
void Main()
{
string str="任意长度的非空字符串";
str=Regex.Replace(str,"(.*)(.{4})$",m=>new string('*',m.Length)+m.Groups[2].Value);
Console.WriteLine(str);  //**********空字符串
}

------解决方案--------------------
 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

             */

------解决方案--------------------