求一替换正则表达式
任意长度的非空字符串
替换为:只保留最后四位可见,其余全替换为符号*
如果字符串本身长度小于四位,则全部替换为* 或者不替换(二选一皆可)
正则表达式能否实现?
且不能用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); //**********空字符串
}