C#正则表达式

  正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符、及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串是否匹配它的过滤逻辑,也可以从字符串中获取我们想要的特定部分。

定位元字符 

  1. \b 匹配单词的开始或结束.

  2. \B 匹配非单词的开始或结束

  3. ^ 匹配必须出现在字符串的开头或行的开头

  4. $ 匹配必须出现在以下位置: 字符串结尾、字符串结尾处的\n之前或行的结尾。

  5. \A 指定匹配必须出 现在字符串的开头(忽略 Mutiline 选项)。

  6. \z 指定匹配必须出现在字符串的结尾或字符串结尾处的\n之前(忽略Multilie选项)。

  7. \G 指定匹配必须出现在上- -个匹配结束的地方。与Match.NextMatch() -起使用时,此断言确保所有匹配都是连续的。

三个括号

  1.  [ ],字符集合,匹配中括号内包含的任意一个字符。例如:"[abc]" 可以匹配 "plain" 的 'a'。

  2.  ( ),提取组,改变运算的优先级。

  3.  { },{n},匹配确定的 n 次。例如:'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o;

        {n,},至少匹配 n 次。例如:'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "fooood" 中的所有 o;

     {n,m},其中 n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 'o'。

简化正则表达式

  1. \d,匹配一个数字字符。等价于 [0-9];

  2. \W,匹配任何非单词字符。等价于 [^A-Za-z0-9_];

  3.  *, 匹配前面的子表达式零次或多次。例如:zo* 能匹配 "z" 以及 "zoo"。等价于{0,};

  4. +, 匹配前面的子表达式一次或多次。例如:'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。等价于 {1,};

  5. ?, 匹配前面的子表达式零次或一次。例如:"do(es)?" 可以匹配 "do" 或 "does" 中的 "do"。等价于 {0,1}。

@符号的作用

  目的是为了不让编译器去解析其中的转义字符,,而作为正则表达式语法(元字符)存在。

常用的4种方法

  1、Regex.Matches()  --提取多个匹配

//TODO 提取字符串中所有的数字
var list = Regex.Matches("2015年12月06日8点40分", @"\d+");//匹配所有数字
foreach (Match item in list)
{
    Console.WriteLine(item.Value);
}

  2、Regex.IsMatch()  --判断是否匹配

 //判断是否为11位数字的电话号码
 var result = Regex.IsMatch("12345678912", @"^[0-9]{11}$");
 Console.WriteLine(result);

  3、Regex.Replace()  --替换匹配内容

//TODO 将手机中间四位变成*号
var strNew = Regex.Replace("13666688888", @"(\d{3})\d{4}(\d{4})", "$1****$2");//"$1"表示第一个小括号里的 ,$2是第2个小括号里的 
Console.WriteLine(strNew);

  4、Regex.Split()    --根据匹配分割字符串

//TODO 提取字符串中所有英文名
var strArr = Regex.Split("Jack123Tom345Mary345Amy", @"\d+");
foreach (var item in strArr)
{
    Console.WriteLine(item);
}

posted @ 2023-11-01 16:15  时而有风  阅读(14)  评论(0编辑  收藏  举报