c# 正则表达式基础与提高

  \n换行符,|优先级最低,a|booo匹配a或booo,并不是aooo或booo

 

以z开头或food结尾

限定符记忆:

     *任意次             ={0,}

     +:至少一次         ={1,}

     ?:最多一次       ={ 0,1}

     {n,}:至少N次

 

 

任意单个字符:[/s/S] 或(.|\n),   .在[ ]中作为普通字符

 

 

 

 

 

默认就是贪婪模式

 item.group(0).value表示匹配的全部

item.group(1).value 表示匹配的第一个括号

 

 WebClient wc = new WebClient();  //下载网页源码再匹配
            string htmlcontent=wc.DownloadString("http://blog.sina.com.cn/s/blog_515617e60101e151.html");
            MatchCollection ec = Regex.Matches(htmlcontent, @"\d+?@\w+.(com|net|org)");

            foreach (Match item in ec)
            {
                textBox1.Text = item.Value;
            }

 

 

 

string a = "23--45-----78----90";
label1.Text= Regex.Replace(a, @"-+", "-"); //结果23-45-78-90
 整体替换:
string a = "welcome 'to' 'china'"; label1.Text= Regex.Replace(a, @"'(.+?)'", "[$1]"); //$1指的是上一个括号匹配的内容,结果为 welcome [to] [china],$0表示全部

 

\b 边界不能匹配的为字母或数字【a-zA-Z0-9】

    string a = "tomorrow.is.sundayis a";
   label1.Text= Regex.Replace(a, @"\bis\b", "**");// \b边界,判断两边是否是字母,此例子is两边非单词字母,能替换
   string a = "### #### ### #### ##";
  label1.Text= Regex.Replace(a, @"\b###\b", "**");// \b必须一边为单词,另一边不是,\b###\b,两边都不是单词类型,不匹配

环视匹配模式写法: 左边带不等式符号,右边不带

    string a = "### w##q #j##q## #### ##";
    label1.Text= Regex.Replace(a, @"(?<!j)##(?=q)", "**");//提取左边不是j右边是q的##

正则分割:

string a = "### w##q #j##q## #### ##";
            string[] b= Regex.Split(a,@"(?<=j).+(?=q)",RegexOptions.IgnorePatternWhitespace);

            foreach (var item in b)
            {
                textBox1.AppendText(item+"\t\n");//### w##q #j  ,  q## #### ##
}

 

 

 去除叠词:

string a = "杨中中中中中中中科科科科科科科科";
string b = Regex.Replace(a, @"(.)\1+", "$1"); 
//\1匹配括号内的正则表达式本身,表示匹配的一样,即(.)\1表示有两个一样的,  $1指的是前面正则表达式括号内匹配到的文本
textBox1.AppendText(b); //杨中科

  

 正则字符串列表过滤敏感词可以从文件读取,格式按照下列字符串格式

//正则字符串列表过滤敏感词:可以随便添加表达式
            string regc = "步枪|黄色|fuck|你妈的|办证|发票";
            string regc2 = "步.{0,3}枪|黄色|fuck|你妈的|办证|发票";
            string userinput = "步**枪";
            bool b = Regex.IsMatch(userinput, regc2);
            textBox1.AppendText(b.ToString());

  

提高效率,缓存正则表达式:

Regex c= new Regex(".+?");
c.IsMatch("ddd");

 

 

应用例子:

1.6位数字开头与结尾:    ^[0-9]{6}$

2. 

3.完全匹配 ^--&

 

4. 10-20的数字,完全匹配

^(1[0-9]|20)$

5.

 

 

 

 

 

 

 

posted @ 2021-05-30 21:56  遥月  阅读(122)  评论(0)    收藏  举报