C#中常用的正则表达式实例
作者:虾BB 发布时间:2021-05-27 04:39:12
目前为止,许多编程语言和工具都包含对正则表达式的支持,C#也不例外,C#基础类库中包含有一个命名空间(System.Text.RegularExpressions)和一系列可以充分发挥规则表达式威力的类(Regex、Match、Group等)。那么,什么是正则表达式,怎么定义正则表达式呢?
正则表达式基础
什么是正则表达式
在编写字符串的处理程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
通常,我们在使用WINDOWS查找文件时,会使用通配符(*和?)。如果你想查找某个目录下的所有Word文档时,你就可以使用*.doc进行查找,在这里,*就被解释为任意字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂。
一个简单的例子——验证电话号码
学习正则表达式的最好方法是从例子开始,下面我们从验证电话号码开始,一步一步的了解正则表达式。
在我们国家,电话号码(如:0379-65624150)通常包含3到4为以0开头的区号和一个7或8为的号码,中间通常以连字符'-'隔开。在这个例子中,首先我们要介绍一个元字符\d,它用来匹配一个0到9的数字。这个正则表达式可以写成:^0\d{2,3}-\d{7,8}$
我们来对他进行分析,0匹配数字“0”,\d匹配一个数字,{2,3}表示重复2到3次,-只匹配”-”自身,接下来的\d同样匹配一个数字,而 {7,8}则表示重复7到8次。当然,电话号码还可以写成 (0379)65624150,这里就交给读者完成。
元字符
在上面的例子中,我们接触到了一个元字符\d,正如你所想的,正则表达式还有很多像\d一样的元字符,下表列出了一些常用的元字符:
表一常用的元字符
转义字符
如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.
例如:unibetter\.com匹配unibetter.com,C:\\Windows匹配C:\Windows。
限定符
限定符又叫重复描述字符,表示一个字符要出现的次数。比如我们在匹配电话号码时使用的{3,4}就表示出现3到4次。常用的限定符有:
表二常用的限定符
正则表达式在程序设计中有着重要的位置,它经常被用于处理字符串信息,下面是正则常用的一些实例。
//验证电话号码<br>public bool IsTelephone(string str_telephone)
{
return System.Text.RegularExpressions.
Regex.IsMatch(str_telephone, @"^(\d{3,4}-)?\d{6,8}$");
}
//验证密码
public bool IsPassword(string str_password)
{
return System.Text.RegularExpressions.
Regex.IsMatch(str_password, @"[A-Za-z]+[0-9]");
}
//验证邮政编码
public bool IsPostalcode(string str_postalcode)
{
return System.Text.RegularExpressions.
Regex.IsMatch(str_postalcode, @"^\d{6}$");
}
//验证手机号码
public bool IsHandset(string str_handset)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_handset, @"^[1][3-5]\d{9}$");
}
//验证身份证
public bool IsIDcard(string str_idcard)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_idcard, @"(^\d{18}$)|(^\d{15}$)");
}
//验证小数格式
public bool IsDecimal(string str_decimal)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_decimal, @"^[0-9]+\.[0-9]{2}$");
}
//验证月份
public bool IsMonth(string str_Month)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_Month, @"^(0?[[1-9]|1[0-2])$");
}
//验证天数
public bool IsDay(string str_day)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_day, @"^((0?[1-9])|((1|2)[0-9])|30|31)$");
}
//验证是否为数字
public bool IsNumber(string str_number)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_number, @"^[0-9]*$");
}
//验证密码长度
public bool IsPasswLength(string str_Length)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_Length, @"^\d{6,18}$");
}
//验证正整数
public bool IsIntNumber(string str_intNumber)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_intNumber, @"^\+?[1-9][0-9]*$");
}
//验证大小写
public bool IsUpChar(string str_UpChar)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_UpChar, @"^[A-Z]+$");
}
public bool IsLowerChar(string str_UpChar)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_UpChar, @"^[a-z]+$");
}
//验证是否为字母
public bool IsLetter(string str_Letter)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_Letter, @"^[A-Za-z]+$");
}
//验证是否为中文
public bool IsChinese(string str_chinese)
{
return System.Text.RegularExpressions.Regex.
IsMatch(str_chinese, @"^[\u4e00-\u9fa5]{1,}$");
}
//验证邮箱
public bool IsEmail(string str_Email)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_Email,
@"^(([\w\.]+)@(([[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))|((\w+\.?)+)@([a-zA-Z]{2,4}|[0-9]{1,3})(\.[a-zA-Z]{2,4}))$");
}
//验证IP
public bool IPCheck(string IP)
{
string num = @"(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)";
return Regex.IsMatch(IP,
("^" + num + "\\." + num + "\\." + num + "\\." + num + "$"));
}
//验证Url
public bool IsUrl(string str_url)
{
return System.Text.RegularExpressions.Regex.IsMatch(str_url,
@"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?");
}
虽然现在很多验证都由前端,但是掌握正则表达式会让你在程序开发过程中快速解决很多东西,特别是在处理字符串的时候,算是比较全面的正则用法,如果有需要可联系我,可直接运行的源码。
以上所述是小编给大家介绍的C#中常用的正则表达式小结网站的支持!
来源:http://www.cnblogs.com/Liuxiong/archive/2016/10/13/5954926.html


猜你喜欢
- 前些天在写个小程序,用到DataGridView,想给它动态的显示行号。不是很费劲GOOGLE了一下,这GOOGLE不要紧,发现了不少问题。
- 贪婪量词:先看整个字符串是不是一个匹配。如果没有发现匹配,它去掉最后字符串中的最后一个字符,并再次尝试。如果还是没有发现匹配,那么 
- 前言昨夜同门云集推杯又换盏,今朝茶凉酒寒豪言成笑谈。半生累,尽徒然,碑文完美有谁看,隐居山水之间誓与浮名散。简介今天给大家带来的是支付宝的月
- 滚轮选择控件Android自带的选择时间控件有点丑,往往产品和设计都比较嫌弃,希望做成ios一样的滚轮选择,下面是我在NumberPicke
- 日期格式化标准 DateTime 格式字符串如果格式字符串只包含下表列出的某个单个格式说明符,则它们被解释为标准格式说明符。如果指定的格式字
- 使用YZMHelper帮助类即可using System;using System.Web;using System.Drawing;usi
- 一,设计多图片打包下载逻辑:1,如果是要拉取腾讯云等资源服务器的图片,2,我们先把远程图片拉取到本地的临时文件夹,3,然后压缩临时文件夹,4
- 一键格式化代碼: Ctrl+Alt+L注意:如果按Ctrl+Shift+F在win10上会出现字体的简繁转换,再重复按键一次就可以转换回来a
- 导出Excel在很多项目中经常用到,本人介绍了C#实现GridView导出Excel实例代码,也全当给自己留下个学习笔记了。using Sy
- maven依赖及一些配置这里主要是搭建项目常用到的maven依赖以及搭建项目会需要用到的一些配置文件,可能下面这些依赖还不是很全,但是应该会
- 在 Unity 中实现对游戏数据存储和读取的方法主要有这几种:使用本地持久化类 PlayerPrefs使用二进制的方法序列化和反序
- 坑出现的环境一般情况下切割字符串会使用split或者StringTokenizer,如下代码String s = ",,o,,&q
- 相比于直线检测,直线拟合的最大特点是将所有数据只拟合出一条直线void fitLine( InputArray points, Output
- 最近接触到一个需求要求压缩导出文件,于是乎便要致力于研究一下工具类啦,故也诞生了此篇文章。下面代码中,溪源也将import导入的依赖也贴出来
- 这篇文章主要介绍了SpringBoot如何读取war包jar包和Resource资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具
- Mapper:@Mapper@OracleRepositorypublic interface OracleRadiusMapper{@In
- @Value获取yml和properties配置参数Yml:#定时任务配置 application:
- 本文实例为大家分享了android实现点击图片全屏展示的具体代码,供大家参考,具体内容如下MainActivity:public class
- 首先理解数据绑定为什么要使用数据绑定基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单:但我们提交后,为了将请求信
- 实例如下所示:System.Net.WebClient myWebClient = new System.Net.WebClient();