项目中有些时候需要用到正则表达式,但是自己对正则表达式不熟悉,每次学习完,过一段时间(长时间)不用,就又忘了,每次需要用到的时候都需要百度下,比较麻烦,这里把C#中经常用到的正则表达式做下总结。

正则表达式常用的环境

爬虫、网站数据验证、日志分析、字符串替换、获取子字符串、文本处理、字符串处理等

正则基础

1. []方括号表示匹配可以匹配方括号中的任意点单个字符,方括号只允许匹配单个字符。
2. | 或表示两项之间的一个选择,它不能和方括号使用,只能和小括号使用。
3. ()小括号表示一个子表达式的开始和结束位置
4. ^ 否符号,如果用在方括号内,“^”表示不想要匹配的字符。
5. . 点字符:匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
6. 定位符:定位符使您能够将正则表达式固定到行首或行尾,^ 和 $ 分别指字符串的开始与结束
7. 限定符:限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配

  • * 表示匹配前面的子表达式0次或多次
  • ?表示匹配前面的子表达式0次或一次
  • + 表示匹配前面的子表达式至少匹配一次
  • {n} 表示匹配前面的子表达式n次
  • {n,m} 表示匹配前面的子表达式从n次到m次

8. 转义字符

  • \d 匹配一个数字字符。等价于 [0-9]。
  • \D 匹配一个非数字字符。等价于 [^0-9]。
  • \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
  • \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
  • \w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
  • \W 匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。
  • \n 匹配一个换行符
  • \r 匹配一个回车符
  • \b 匹配一个单词边界,即字与空格间的位置。匹配单词的开始或者结尾部分
  • \B 匹配非单词边界 匹配单词的中间部分,例如:匹配:Chapter中的apt,/\Bapt/

9. 捕获组:除(Expression)和(?<name>Expression)语法外,其它的(?...)语法都不是捕获组。

    var str = "Is is the cost of of gasoline going up up";
var patt1 = @"\b([a-z]+) \1\b";
var matchDatas1 = Regex.Matches(str, patt1).Select(x => x.Value);
Console.WriteLine(JsonConvert.SerializeObject(matchDatas1));//["of of","up up"]

捕获组的顺序是从左到右,从1开始,0代表整体,这里的\1就是分组的第一个自匹配项,在Replace中可以用$1操作

    string a = @"(020)76544567";
string b = @"\((\d{3})\)(\d{8})";
var c = new Regex(b);
string d = c.Replace(a, "$0-$1-$2");
Console.WriteLine(d);//(020)76544567-020-76544567

10.选择
用圆括号将所有选择项括起来,相邻的选择项之间用|分割。用圆括号会有一个副作用,使相关的匹配会被缓存,缓存的数据会占用内存,降低匹配效率。此时可用?:放在第一个选项前来消除这种副作用。
可以使用非捕获元字符 ?:、?= 或 ?! 来重写捕获,忽略对相关匹配的保存。

  • (?:pattern)匹配pattern,但不捕获匹配结果。'industr(?:y|ies)' 例如:匹配'industry'或'industries'。
  • (?=pattern)零宽度正向预查,不捕获匹配结果。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”
  • (?!pattern)正向否定预查,不捕获匹配结果。例如,“Windows(?!95|98|NT|2000)”不能匹配“Windows2000”中的“Windows”,但能匹配“Windows3.1”中的“Windows”

常用正则表达式

1. 非空字符串,适用于匹配单词,关键字等 @"\S+"

2. html标签 @"<[^>]+>"

  • 匹配带连接的a标签 @"<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>"
  • 匹配链接 "(href|src)\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))"
  • 匹配图片 "<img(.*?)>"
  • 任意标签: @"\<[^\>]+\>([^\<]+)\<\/[^\>]+\>"

3. Email地址:@"\w+@(\w+\.)+\w{2,3}";

4. 域名:@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?";

5. InternetURL:@"[a-zA-z]+://[^\s]*" 或 @"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$";

6. 手机号码:@"^([1][3,4,5,6,7,8,9])\d{9}$";

7. 国内电话号码:@"\d{3}-\d{8}|\d{4}-\d{7}";

8. 身份证:@"(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)";

9. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 6-10 之间):@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{6,10}$";

10. 简单密码:@"\w{6,10}";

11. 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$";

12. 钱:@"^[0-9]+(.[0-9]+)?$";

13. QQ:@"[1-9][0-9]{4,}";

13. 邮政编码:@"[1-9]\d{5}(?!\d)";

14. IP:@"^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$";

15. 数字: @"^\d+$";

16. 字母:@"^[a-zA-Z]+$";

17. 获取Html中的文本内容

        public static string GetHtmlText(string html)
{
html = Regex.Replace(html, @"<[^<>]+>", "", RegexOptions.IgnoreCase);
html = html.Replace("\r\n", "").Replace("\r", "").Replace("&nbsp;", "").Replace(" ", "");
return html;
}

18.隐藏手机号中间几位数

Regex.Replace(手机号, "(\\d{3})\\d{4}(\\d{4})", "$1****$2");

C#常用正则表达式回顾的更多相关文章

  1. Javascript正则构造函数与正则表达字面量&&常用正则表达式

    本文不讨论正则表达式入门,即如何使用正则匹配.讨论的是两种创建正则表达式的优劣和一些细节,最后给出一些常用正则匹配表达式. Javascript中的正则表达式也是对象,我们可以使用两种方法创建正则表达 ...

  2. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  3. 常用正则表达式-copy

    匹配中文:[\u4e00-\u9fa5] 英文字母:[a-zA-Z] 数字:[0-9] 匹配中文,英文字母和数字及_: ^[\u4e00-\u9fa5_a-zA-Z0-9]+$ 同时判断输入长度:[\ ...

  4. IOS常用正则表达式

    IOS常用正则表达式 正则表达式用于字符串处理.表单验证等场合,实用高效.现将一些常用的表达式收集于此,以备不时之需. 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是 ...

  5. 【转】【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式

    本文属转载,来源: http://www.byywee.com/page/M0/S868/868615.html 关于Model验证官方资料: http://msdn.microsoft.com/zh ...

  6. PHP常用正则表达式汇总 [复制链接]

    PHP常用正则表达式汇总 [复制链接] 上一主题下一主题   离线我是小猪头   法师     发帖 539 加关注 发消息 只看楼主 倒序阅读 使用道具楼主  发表于: 2011-06-22 更多 ...

  7. PHP中常用正则表达式大全

    常用正则表达式大全!(例如:匹配中文.匹配html) 匹配中文字符的正则表达式: [u4e00-u9fa5]    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内 ...

  8. JavaScript常用正则表达式与应用(一)

    JavaScript的String类和RegExp对象类都定义了相关方法使用正则表达式进行模式匹配,本文将以连载方式介绍JavaScript常用正则表达式与相关应用,欢迎交流 本节是连载一,首先介绍J ...

  9. Java基础知识强化71:正则表达式之基本规则 和 常用正则表达式

    1. 基本规则: A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') B:字符类 [abc] a.b 或 ...

随机推荐

  1. SQL Server分页存储过程笔记

    USE [database] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[ProcedureN ...

  2. WEB性能优化【资料】

    为了解决近期项目遇到的性能瓶颈,花费不少功夫恶补了web性能的相关优化方案,整理了一些资料,分享给大家. 博客 网页性能管理详解 - 阮一峰的网络日志 页面性能优化的利器 - Timeline - 云 ...

  3. String的本质是一个char*,只是以类的形式提供,使用起来比较方便

    String的本质是一个char*,只是以类的形式提供,使用起来比较方便 Class String {private: char* m_data;}摘自<后台开发 核心技术与应用实践__徐晓鑫& ...

  4. 快速写入Xml文件

    我们在做一些操作的时候会需要生成日志,Xml文件就是我们常用的一种日志文件. 普通操作Xml文件的代码遇到大数据量的话就很慢了. 用这个生成Xml文件的话,即使数据量很大,也很快 private vo ...

  5. ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一 ...

  6. Android零基础入门第56节:翻转视图ViewFlipper打造引导页和轮播图

    原文:Android零基础入门第56节:翻转视图ViewFlipper打造引导页和轮播图 前面两期学习了 ViewAnimator及其子类ViewSwitcher的使用,以及ViewSwitcher的 ...

  7. Jquery 插件开发公开属性顺序的影响.

    如下代码拷贝能正常运行. (function ($) { $.fn.DemoPlugin = function (options) { var opts; opts = $.extend({}, $. ...

  8. 解决com.android.dex.DexException: Multiple dex files define Lcom/google/gson/JsonSerializer;

    我在开发Windows Azure的Mobile Service(隔天补上创建过程)的安卓客户端时,报出了com.android.dex.DexException: Multiple dex file ...

  9. WCF研究-前篇

    前篇 1.从SOA说起 2.什么是WCF 3.WCF通信模型 4.Endpoint与ABC以及元数据    1.SOA (Service Oriented  Architecture) Ø 一种组件架 ...

  10. 用C实现OOP面向对象编程(1)

    如摘要所说,C语言不支持OOP(面向对象的编程).并这不意味着我们就不能对C进行面向对象的开发,只是过程要复杂许多.原来以C++的许多工作,在C语言中需我们手动去完成. 博主将与大家一起研究一下如下用 ...