C#正则表达式开源工具,为.net开源绵尽薄力

先交代一下背景,最近工作中经常用到正则表达式,而正则表达式这个东西我个人觉得很鸡肋,不用吧,有些功能实现起来会很麻烦。用吧,又不是说工作中经常用到,只是有时候有些需要求用到而已。但是正则表达式只要一段时间不用,就会被遗忘,甚至是忘的一干二净。为了一定程度上解决这个鸡肋的问题,就有了这篇博客和我打算写的这个开源的正则表达式验证工具的想法。关于正则网上的资料其实已经很多了,之所以还写这篇博客只是为了记录一些现在或者以后工作中可能会用到的正则,然后分享出来,同时也是希望为.net开源做一些事情。

v0.写在前面

记得上一次正儿八经的用正则表达式还是三年前,虽然期间也零零散散的用过一些,但是基本已经忘的差不多了,所以这篇博客中如果有什么不对的地方欢迎和感谢大家指正!这里我只是写出了一些个人工作中常用到的正则匹配,如果同时有园友愿意贡献一份力量参与到正则开源工具的编码中,我会非常欢迎。

最近园子里的"月经贴"越来越多,我就很纳闷,这群人是不是闲的蛋疼?你有时间在这"指点江山"批评这个语言抨击那个环境的,你还不如张开双手拥抱.net开源大潮呢。随着.net开源的到来,.net的春天也来了,我们应该伸出双手为.net开源做一些事情,让.net社区越来越开源。当然这是题外话,那些月经贴也不关我啥事。

v1.源码地址

https://github.com/toutouge/TouTou.RegexTool

v2.正文开始

2.1.: 通用匹配

C#通用匹配规则,可以在调用的时候传入源字符串和对应的正则


/// <summary>

/// 检测字符串中是否包含符合正则的子集

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="reg">正则, e.g. \d+</param>

/// <returns>true:包含,反之不包含</returns>

publicbool CheckContainsByReg(string source, string reg)

{

returnRegex.Match(source, reg).Success;

}

/// <summary>

/// 检测整个字符串是否能匹配正则,而不是包含

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="reg">正则, e.g. ^\d+$</param>

/// <returns>true:匹配,反之不匹配</returns>

publicbool CheckStringByReg(string source, string reg)

{

Regex rg = newRegex(reg, RegexOptions.IgnoreCase);

return rg.IsMatch(source);

}

/// <summary>

/// 从指定字符串中过滤出第一个符合正则匹配的子集

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="reg">正则, e.g. \d+</param>

/// <returns>源字符串的第一个匹配的子集</returns>

publicstring GetFirstStringByReg(string source, string reg)

{

returnRegex.Match(source, reg).Groups[0].Value;

}

/// <summary>

/// 从指定字符串中过滤出所有符合正则匹配的子集

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="reg">正则, e.g. \d+</param>

/// <returns>true:匹配,反之不匹配</returns>

publicList<string> GetStringByReg(string source, string reg)

{

var regex = Regex.Matches(source, reg);

List<string> list =newList<string>();

foreach (Match item in regex)

{

list.Add(item.Value);

}

return list;

}

2.2.: 数字匹配

C#正则表达式根据各种需求匹配数字


/// <summary>

/// 从指定字符串中过滤出第一个数字

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串的第一个数字</returns>

publicstring GetFirstNumberByString(string source)

{

returnRegex. Match(source, @"\d+").Groups[0].Value;

}

/// <summary>

/// 从指定字符串中过滤出最后一个数字

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串的最后一个数字</returns>

publicstring GetLastNumberByString(string source)

{

var reg = Regex.Matches(source, @"\d+");

return reg[reg.Count -1].Value;

}

/// <summary>

/// 从指定字符串中过滤出所有数字

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串的所有数字</returns>

publicList<string> GetAllNumberByString( string source)

{

var reg = Regex.Matches(source, @"\d+");

List<string> list =newList<string>();

foreach (Match item in reg)

{

list.Add(item.Value);

}

return list;

}

/// <summary>

/// 检车源字符串中是否包含数字

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>true:源字符串包含数字;false:源字符串不包含数字</returns>

publicbool CheckNumberByString(string source)

{

returnRegex. Match(source, @"\d").Success;

}

/// <summary>

/// 判断字符串是否全部是数字且长度等于指定长度

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="length">指定长度</param>

/// <returns>返回值</returns>

publicbool CheckLengthByString(string source, int length)

{

Regex rg = newRegex(@"^\d{" + length +"}$");

return rg.IsMatch(source);

}

2.3.: 正则截串

C#根据给定的起始字符截取起始之间的字符串


/// <summary>

/// 截取字符串中开始和结束字符串中间的字符串

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="startStr">开始字符串</param>

/// <param name="endStr">结束字符串</param>

/// <returns>中间字符串</returns>

publicstring Substring(string source, string startStr, string endStr)

{

Regex rg = newRegex("(?<=(" + startStr +"))[.\\s\\S]*?(?=(" + endStr +"))", RegexOptions.Multiline |RegexOptions.Singleline);

return rg.Match(source).Value;

}

2.4.: 邮箱匹配

C#正则表达式匹配邮箱


/// <summary>

/// 匹配邮箱是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>匹配结果true是邮箱反之不是邮箱</returns>

publicbool CheckEmailByString(string source)

{

Regex rg = newRegex("^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$", RegexOptions.IgnoreCase);

return rg.IsMatch(source);

}

2.5.: URL匹配

C#正则表达式匹配URL


/// <summary>

/// 匹配URL是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>匹配结果true是URL反之不是URL</returns>

publicbool CheckURLByString(string source)

{

Regex rg = newRegex(@"^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&‘\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&‘\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&‘\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&‘\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&‘\(\)\*\+,;=]|:|@)|\/|\?)*)?$" , RegexOptions.IgnoreCase);

return rg.IsMatch(source);

}

2.6.: 日期匹配

C#正则表达式匹配日期


/// <summary>

/// 匹配日期是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>匹配结果true是日期反之不是日期</returns>

publicbool CheckDateByString(string source)

{

Regex rg = newRegex(@"^(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})$");

return rg.IsMatch(source);

}

/// <summary>

/// 从字符串中获取第一个日期

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中的第一个日期</returns>

publicstring GetFirstDateByString(string source)

{

returnRegex.Match(source,@"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})").Groups[0].Value;

}

/// <summary>

/// 从字符串中获取所有的日期

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中的所有日期</returns>

publicList<string> GetAllDateByString( string source)

{

var all = Regex.Matches(source, @"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})");

List<string> list =newList<string>();

foreach (Match item in all)

{

list.Add(item.Value);

}

return list;

}

2.7.: 密码匹配

C#正则表达式匹配密码


/// <summary>

/// 检测密码复杂度是否达标:密码中必须包含字母、数字、特称字符,至少8个字符,最多16个字符。

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>密码复杂度是否达标true是达标反之不达标</returns>

publicbool CheckPasswordByString(string source)

{

Regex rg = newRegex(@"^(?=.*\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}$");

return rg.IsMatch(source);

}

2.8.: 邮编匹配

C#正则表达式匹配邮编


/// <summary>

/// 匹配邮编是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>邮编合法返回true,反之不合法</returns>

publicbool CheckPostcodeByString(string source)

{

Regex rg = newRegex(@"^\d{6}$");

return rg.IsMatch(source);

}

2.9.: 电话号码

C#正则表达式匹配电话


/// <summary>

/// 匹配电话号码是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>电话号码合法返回true,反之不合法</returns>

publicbool CheckTelephoneByString(string source)

{

Regex rg = newRegex(@"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$");

return rg.IsMatch(source);

}

/// <summary>

/// 从字符串中获取电话号码

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中电话号码</returns>

publicstring GetTelephoneByString(string source)

{

returnRegex. Match(source, @"(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}").Groups[0].Value;

}

2.10.: 手机号码

C#正则表达式匹配手机号码


/// <summary>

/// 匹配手机号码是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>手机号码合法返回true,反之不合法</returns>

publicbool CheckMobilephoneByString(string source)

{

Regex rg = newRegex(@"^[1]+[3,5]+\d{9}$");

return rg.IsMatch(source);

}

/// <summary>

/// 从字符串中获取手机号码

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中手机号码</returns>

publicstring GetMobilephoneByString(string source)

{

returnRegex. Match(source, @"[1]+[3,5]+\d{9}").Groups[0].Value;

}

2.11.: 身份证匹配

C#正则表达式匹配身份证号码


/// <summary>

/// 匹配身份证号码是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>身份证号码合法返回true,反之不合法</returns>

publicbool CheckIDCardByString(string source)

{

Regex rg = newRegex(@"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$");

return rg.IsMatch(source);

}

/// <summary>

/// 从字符串中获取身份证号码

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中身份证号码</returns>

publicstring GetIDCardByString(string source)

{

returnRegex. Match(source, @"(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))").Groups[0].Value;

}

时间: 2024-10-01 04:25:49

C#正则表达式开源工具,为.net开源绵尽薄力的相关文章

的机器学习开源工具分享

本文将介绍21个你可能没使用过的机器学习开源工具. · 每个开源工具都为数据科学家处理数据库提供了不同角度. · 本文将重点介绍五种机器学习的工具——面向非程序员的工具(Ludwig.Orange.KNIME).模型部署(CoreML.Tensorflow.js).大数据(Hadoop.Spark).计算机视觉(SimpleCV).NLP(StanfordNLP).音频和强化学习(OpenAI Gym). 你肯定已经知道一些知名的开源工具,如R.Python.Jupyter笔记本等.但除此之外,

GitHub 开源工具整理

技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 OSChina:开源技术社区,开源方面做的不错哦 cnblogs,51cto,csdn:常见的技术社区,各有专长 stackoverflow:IT技术问答网站 GitHub:全球最大的源代码管理平台,很多知名开源项目都在上面,如Linux内核, OpenStack等免费的it电子书:http://

ArcMap2Sld:一个将MXD中图层配图样式转换为OGC的SLD文件的开源工具

在一个项目中,用户采用GeoServer做为GIS服务器(原因嘛当然是免费能省钱,经过验证可能还会在性能和稳定性等表现力也有优越性),但是手上收集的数据都是ESRI格式的,这倒不打紧,因为GeoServer直接能够支持ESRI的shape file和ArcSDE两种数据格式,要命的是用户的配图也是用ESRI,mxd中40个左右的图层组织和专题图样式都配好了.在网上查了大部分关于在GeoServer中发布服务的样式都是建议在uDig中重新配置,然后导出SLD文件,添加到GeoServer中.由于时

AS3的大量实用工具类、开源包,该帖绝对值得你收藏!

ActionScriptUtility Class Tweener Tweening Platform tween24 – 一位日本人写的tween库 Tweener Audio as3soundeditorlib ASAudio – 小巧的声音处理库 SoundAS – 实用的声音管理库 Graphic as3-bitmap-mosaic-class graffiti Volumetrics – 一款实时光照效果库 Component Minimalcomps – 小巧的纯AS组件库 Skin

Java开源工具:网站开发工具清单

美国程序员Jon Scott Stevens,公布了他的创业公司所使用的开发工具清单. 他的语言平台是Java,开发项目是一个网站(还未上线).所用到的工具都是开源的,可以免费得到. 在目前的创业者之中,用Java作为网站开发语言的人似乎很少.这当然不是没有原因的,Java看上去确实不像是最便捷的网站开发工具,给人的感觉是用起来麻烦又费事. 但是不可否认的是,Java的平台很成熟,各种工具包.工具库非常多,而且JVM虚拟机更是先进的技术.另外,Google App Engine平台提供免费的Ja

DevOps开源工具的三种分类整理

原文地址:http://www.360doc.com/content/16/0322/07/31263000_544210096.shtml 随着开发运维一体化的DevOps运动在国内外蓬勃发展,DevOps相关工具也呈现热闹趋势,在这个言必谈如何实施落地引入工具.建设平台的大环境下,我们今天也来盘点一下DevOps相关工具. 先来看一下业界对DevOps工具的各种分类介绍. 一.DevOps应用交付工具链   ElasticBox是国外一个云应用管理工具,主要用于实现云应用生命周期的可视化管理

淘宝开源工具:Orztop

mysql自动化运维工具参考文档; 淘宝开源工具:Orztop 实时查看当前的processlist和full processlist; 可以查看mysql数据库实时运行的sql状况的工具,以前苦于通过show processlist/show full processlist抓取sql的同志们现在只要盯一盯屏幕就可以了,非常的方便, 安装部署: 1.下载:wget http://hidba.org/wp-content/uploads/2013/06/orztop.rar 上传下载的文件到服务

tesseract-ocr图片识别开源工具

tesseract-ocr图片识别开源工具 今天看同事的ppt,提到了图片识别,又tesseract-ocr,觉得不错,试一下,如果效果好可以用来做验证码的识别 http://code.google.com/p/tesseract-ocr/ tesseract是一款开源工具,我安装了Windows版试水先 1.首先登录首页在‘下载’页面下载 Java代码   tesseract-ocr-setup-xx.xx.exe chi_sim.traineddata.gz   中文语言包 2.双击即可安装

Android开源工具项目集合

最近因为要去外派了,工欲善其事,必先利其器!所以又回顾了一下自己github上所收藏的项目,也算是温故而知新吧. 最流行的android组件大全 http://www.open-open.com/lib/view/open1409108030307.html Android开源项目分类汇总 http://www.open-open.com/lib/view/open1406272852585.html Android开发免费类库和工具集合 http://www.open-open.com/lib