.NET-15-正则替换

xiaoxiao2021-03-01  25

正则替换:

把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             //{             //    //直接通过思密达             //}

 

 

转载请注明原文地址: https://www.6miu.com/read-4200279.html

最新回复(0)