正则替换:
把a?替换成一个A //string str = "hiaaa你aa好aaa啊aa"; //str = Regex.Replace(str, "a+", "A"); //Console.WriteLine(str);
把引号替换成中括号,这里需要使用组 如果想要输出$,则需要使用$$ //string str = "hello 'welcome' to 'china' 'yy' 'lzs' 'xss'"; //str = Regex.Replace(str, "'(.+?)'", "[$1]$$"); //Console.WriteLine(str);
隐藏手机号 //string str = "yy18019999999,ly18019999998,xss18019999997"; //str = Regex.Replace(str, "([1-9][0-9]{2})[0-9]{4}([0-9]{4})", "$1****$2"); //Console.WriteLine(str);
//隐藏邮箱,邮箱名称有几位替换成几个* //这里是直接全部替换成了3个*,想要几个字符替换成几个*需要穿委托参数 string str = "邮箱sdkfj@163.com,邮箱sd@iccast.cn,邮箱1231241@qq.com"; //禁止匹配汉字 str = Regex.Replace(str, @"\w+(@\w+.\w+)", "***$1", RegexOptions.ECMAScript); Console.WriteLine(str);
//单词边界\b 使用单词边界替换固定的单词 把come替换成go //string str = "welcome to china, come on!!"; 这样会把welcome中的come也给替换掉 str = Regex.Replace(str, "come", "go"); 使用单词边界来判断 单词边界是个断言(还有^$也是断言),只进行判断不进行匹配 把光标定位到一个任意位置,这个光标的位置就是一个边界,如果这个光标的一边是字母,一边不是则这个光标就可以看做是个单词的边界(这是我自己的理解,可能这么解释并不合适) 单词边界只进行判断,并不进行匹配 什么是“单词”,正则匹配结果为[a-zA-Z0-9_] //str = Regex.Replace(str, @"\bcome\b", "go"); //Console.WriteLine(str);
提取三个字母组成的单词 //string str = "hi,how are you,welcome to china,yes!!"; //MatchCollection mats = Regex.Matches(str, @"\b[a-zA-Z]{3}\b", RegexOptions.IgnoreCase); //foreach (Match item in mats) //{ // Console.WriteLine(item.Value); //}
提取三个字母组成的单词 //string str = "## # ### # ### ##### ## ### ####"; 这里输出为空,匹配不到任何结果,因为#并不是单词,所以单词边界无法对其进行判断 MatchCollection mats = Regex.Matches(str, @"\b###\b"); 这里匹配多了,四个字符和五个字符的也被匹配出来了 MatchCollection mats = Regex.Matches(str, "###"); 这里使用环视,正向环视和逆向环视 //MatchCollection mats = Regex.Matches(str, @"(?<= )###(?= )"); //foreach (Match item in mats) //{ // Console.WriteLine(item.Value); //}
引用分组 叠词替换 //string str = "我我我我我嘻嘻嘻嘻嘻哈哈哈哈哈哈你你你你你"; 这里使用分组(),之后的\1表示分组信息,\1表示第一组,\2表示第二组 ()()() \1\2\3 匹配任意的字符,然后把这个字符分组,之后分组的信息继续出现一次或多次 //str = Regex.Replace(str, @"(.)\1+", "$1"); //Console.WriteLine(str);
时间格式替换 将日期格式mm/dd/yyyy替换成 yyyy-mm-dd //string str = "我的生日是06/27/2015小硕硕的生日是11/05/2016"; //str = Regex.Replace(str, @"(\d{2})/(\d{2})/(\d{4})", "$3-$1-$2", RegexOptions.ECMAScript); //Console.WriteLine(str);
敏感词过滤 用户输入的字符串 //string str = ""; 保存需要审核的敏感词 //StringBuilder sbMode = new StringBuilder(); //sbMode.Append("安定片|网络推广|办理证件|办证"); 保存绝对不允许发布的敏感词 //StringBuilder sbBanned = new StringBuilder(); //sbBanned.Append("手枪|假币|冰毒|吸毒|赌博|博彩|枪手");
验证是否有禁止发送的关键字 //if (Regex.IsMatch(str, sbBanned.ToString())) //{ // //禁止发帖 //} //else if (Regex.IsMatch(str, sbMode.ToString())) //{ // //需要审核 //} //else //{ // //直接通过思密达 //}