前言
正则表达式是一种用于分析、匹配和处理字符串的特定模式。其丰富的泛模式匹配表示法,可用于查找特定字符、提取、编辑、替换或删除、验证文本等操作。
工作方式
使用正则表达式处理文本的核心是正则表达式引擎,.NET 是由 Regex 类来表示。在使用正则表达式时,需要向正则表达式引擎提供正则表达式模式和分析的文本。
Regex 类
Regex 类常用方法
方法 | 描述 |
---|---|
IsMatch | 指示正则表达式在输入字符串中是否找到匹配项。 |
Matche | 检索匹配正则表达式模式的一个文本匹配项。 |
Matches | 检索匹配正则表达式模式的所有文本匹配项。 |
Replace | 替换匹配正则表达式模式的文本。 |
Split | 指定的正则表达式模式定义的位置进行分割字符串。 |
Regex 类应用示例
1、字符串匹配,实现验证文本操作
#region 匹配字符串是否为IP地址
string ip="127.0.0.1";
bool matchResult = Regex.IsMatch(ip, @"^\d{1,3}(\.\d{1,3}){3}$");
if (matchResult)
{Console.WriteLine(string.Format("{0}是IP地址",ip));
}
#endregion#region 匹配字符串中是否包含指定字符
string content = "RTSF-202404050001";
Regex regex = new Regex("rtsf",RegexOptions.IgnoreCase);
if (regex.IsMatch(content))
{Console.WriteLine("字符串中包含:RTSF!");
}
#endregion#region 匹配日期合法性
string dateTime = "2024-04-06";
bool matchDateResult = Regex.IsMatch(dateTime, @"^\d{4}\-\d{1,2}\-\d{1,2}$");
if (matchDateResult)
{Console.WriteLine(string.Format("{0}是日期", dateTime));
}
#endregion
2、字符串替换
#region 替换实现手机号码脱敏
//对手机号码脱敏
string pattern = @"(\d{3})\d{4}(\d{4})";
// 替换后的格式
string replacement = "$1****$2";
// 手机号
string phoneNumber = "13600000001";
// 脱敏后
string maskPhoneNumber=Regex.Replace(phoneNumber, pattern, replacement);
Console.WriteLine(string.Format("手机号码是:{0}", dateTime));
#endregion #region 简单的字符替换
string content = "136*0000*0001";
// 实例方法
Regex regex = new Regex("*", RegexOptions.IgnoreCase);
// 替换
string replaceResult = regex.Replace(content,"-");
Console.WriteLine(string.Format("原字符{0},替换后{1}", content,replaceResult));
#endregion
3、字符串拆分
#region 按数字将字符串拆分
string pattern = @"\d+";
Regex regex = new Regex(pattern);
string content = "13Regex46Pattern79Result01";
string[] result = regex.Split(input);
#endregion
4、字符串提取
#region 提取字符字符串中[]范围的的字符
string pattern = @"(?is)(?<=\[)(.*)(?=\])";
Regex regex = new Regex(pattern);
string result = regex.Match("手机号[1360000001]联系").Value;
#endregion
常用正则模式
正则表达式模式是由一系列字符和特殊字符组成,用于描述要匹配的文本模式。设计正则表达式的模式也是使用正则难点,下面给出一常用的模式。
1、校验数字
// 匹配0-9数字
Regex regex = new Regex(@"^[0-9]*$");
// 匹配出现过n次的数字,使用时指定如4
Regex regex = new Regex(@"^\d{n}$");
// 匹配非零的正整数
Regex regex = new Regex(@"^[1-9]\d*$");
// 1或2位小数的正数或负数
Regex regex = new Regex(@"^(\-)?\d+(\.\d{1,2})?$");
// 可以为正数、负数或小数
Regex regex = new Regex(@"^(\-|\+)?\d+(\.\d+)?$");
2、校验字符
//汉字
Regex regex = new Regex(@"^[\u4e00-\u9fa5]{0,}$");
//英文和数字
Regex regex = new Regex(@"^[A-Za-z0-9]+$");
//长度为n,m的所有字符,如3,20
Regex regex = new Regex(@"^.{3,20}$");
//由26个英文字母组成的字符串
Regex regex = new Regex(@"^[A-Za-z]+$");
//由26个大写英文字母组成的字符串
Regex regex = new Regex(@"^[A-Z]+$");
//由26个小写英文字母组成的字符串
Regex regex = new Regex(@"^[a-z]+$");
//由数字和26个英文字母组成的字符串
Regex regex = new Regex(@"^[A-Za-z0-9]+$");
//中文、英文、数字包括下划线
Regex regex = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9_]+$");
3、常见模式
// 验证电话号码
Regex regex = new Regex(@"^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$");
// 验证身份证号
Regex regex = new Regex(@"^\d{15}|\d{18}$");
// 中国邮政编码
Regex regex = new Regex(@"[1-9]\d{5}(?!\d)");
// IP地址
Regex regex = new Regex(@"\d+\.\d+\.\d+\.\d+");
小结
正则表达式是一种非常方便和强大的语法,可以用于搜索、匹配和替换字符串。本文介绍希望能对大家有所帮助。后续将对正则表达式模式构成,掌握如设计自己需要的正则表达式的模式。