求一替换正则表达式 任意长度的非空字符串替换为:只保留最后四位可见,其余全替换为符号*如果字符串本身长度小于四位,则全部替换为* 或者不替换(二选一皆可)正则表达式能否实现?且不能用IF等逻辑语句来判断。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 替换为一个* 我到可以一个正则就OK 如果是前面的字符全部为* 一个正则实现 没想出来替换为一个*的:正则:([\s\S]+)([\s\S]{4})替换的:*$2测试:源:ad1啊没能理解我的撒@a87945s---得到:*945s源:ad11--------得到ad11源:ad1---------得到ad1 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); } 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); //**********空字符串} 这循环怎么做? 未处理NullReferenceException问题,和读excel表中数字时是科学计数形式 〔在线〕不同网段的机器连通问题 C#里提供的画点函数,新手等待高人指点 ing.... 如何在 c# 中设置excel 的某一列为文本,以及他的背景颜色 从c#传带注释的sql语句去db2执行。。。 怎么做才对?! C#如何显示带am/pm的时间? 微软msdn中文网站快要开张啦! RadioButton .net和xml整合技术讲座,谁来?统计人数呢! 喜欢技术钻研的进,操蛋的UI设计出的效果,请问大神这个效果可以实现吗?怎么实现? 页面刷新时何时把页面内控件内容清空?
替换为一个*的:
正则:([\s\S]+)([\s\S]{4})
替换的:*$2
测试:
源:ad1啊没能理解我的撒@a87945s---得到:*945s
源:ad11--------得到ad11
源:ad1---------得到ad1
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);
}
{
string str="任意长度的非空字符串";
str=Regex.Replace(str,"(.*)(.{4})$",m=>new string('*',m.Length)+m.Groups[2].Value);
Console.WriteLine(str); //**********空字符串
}
"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,'*'));
}
void Main()
{
string str="任意长度的非空字符串";
str=Regex.Replace(str,"(.+)(.{4})$",m=>new string('*',m.Length-4)+m.Groups[2].Value);
Console.WriteLine(str); //**********空字符串
}