首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求1替换正则表达式

2013-07-16 
求一替换正则表达式任意长度的非空字符串替换为:只保留最后四位可见,其余全替换为符号*如果字符串本身长度

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

正则表达式能否实现?
且不能用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

             */

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



 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,'*'));
            }

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

热点排行