开发者社区> 杰克.陈> 正文

正则表达式-Csharp

简介: 原文:正则表达式-Csharp 学习笔记:正则表达式 一. 正则表达式 正则表达式(Regex)是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现。 一个正则表达式就是由普通的字符及特殊字符(称为元字符符)组成的文字模式。
+关注继续查看
原文:正则表达式-Csharp

学习笔记:正则表达式

一. 正则表达式

正则表达式(Regex)是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现。

一个正则表达式就是由普通的字符及特殊字符(称为元字符符)组成的文字模式。该模式秒杀在查找文章主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

正则表达式的常用元字符(全为英文状态,注意可以代表的字符种类和个数)

 

元字符

含义

.()

可以匹配除”\n”外的任意一个字符

[](中括号)

可以匹配中括号内的任意一个字符

例如,"[abc]" 匹配"plain"中的"a"

|(或符号)

可以匹配或符号两边的任意一个字符,优先级比较低

匹配 或 y。例如 "z|food" 可匹配 "z" 或 "food"

 

正则表达式的常用限定符(全为英文状态)

 

元字符

含义

*(星号)

其限定的表达式出现次数等于或大于0

例如,"zo*"可以匹配"z""zoo"

+(加号)

其限定的表达式至少出现1

例如,"zo+"可以匹配"zoo",但不匹配"z"

?(问号)

其限定的表达式出现1次或0

例如,"a?ve?"可以匹配"never"中的"ve"

{n}

其限定的表达式出现次数确定n(n0)

{n,}

其限定的表达式至少出现n

{n,m}

其限定的表达式出现的次数为≥n次,≤m(m>n)

 

还有几个重要的符号:

符号

含义

^ (Shift+6)

匹配输入的开始位置

非的意思。例如[^a-z],匹配非a-z的一个字符。

$ (Shift+4)

匹配输入的结尾

\

将下一个字符标记为特殊字符或字面值

例如:想匹配”.时或其他特殊字符时,需写为的”\.

()(小括号)

1. 改变优先级

2. 分组,提取信息

 

需要熟记一些简写:

\d = [0-9]

\D=[^0-9]

\s =空字符,如\n tab space

\S=非空字符

\w 能组成词的字符(字面、数字、中文或下划线等)

\W \w

 

正则表达式在.Net就是用字符串表示,这个字符串格式比较特殊,无论多么特殊,在C#语言看来都是普通的字符串,具体什么含义由Regex类内部进行语法分析。

正则表达式可以进行字符串的匹配、字符串的提取、字符串的替换。C#中分别对应正则表达式的三个重要方法。

1) IsMatch() 返回值为bool类型

格式:Regex.IsMatch("字符串", "正则表达式");

作用:判断字符串是否符合模板要求

例如:bool b =Regex.IsMatch("bbbbg","^b.*g$");判断字符串是否以b开头且以g结尾,中间可以有其他字符,若正确返回true,否则else

2) Match() 返回值为Match类型,只能匹配一个

Matches() 返回值为MatchCollection集合类型,匹配所有符合的

格式:Match match = Regex.Match("字符串", "正则表达式");

MatchCollection matches= Regex. Matches ("字符串", "正则表达式");

作用:

①提取匹配的子字符串

②提取组。Groups的下标由1开始,0中存放matchvalue

例如:

Match match = Regex.Match("age=30", @"^(.+)=(.+)$");
if (match.Success){     
    Console.WriteLine(match.Groups[0] .Value);//输出匹配的子字符串
    Console.WriteLine(match.Groups[1] .Value);//获取第一个分组的内容
    Console.WriteLine(match.Groups[2] .Value);//获取第二个分组的内容
}

----------------------------------------------------------------------------------

View Code
        MatchCollection matches = Regex.Matches("2010年10月10日", @"\d+");
         for (int i = 0; i < matches.Count; i++)
         {
                Console.WriteLine(matches[i].Value);
         }

3) Replace() 返回值为string

两种常用方式如下:

View Code
            //将所有的空格替换为单个空格
            string str = "   aa afds     fds  f ";
            str = Regex.Replace(str, @"\s+", " ");
            Console.WriteLine(str);

            string str = "hello“welcome to ”beautiful “China”";
            //hello"welcome to "beautiful "China"
            //$1表示引用第一组。$2表示用第二组。
            string strresult = Regex.Replace(str, "“(.+?)”", "\"$1\"");
            Console.WriteLine(strresult);    

贪婪模式与终结贪婪模式

 

实际应用有采集器(从某个网页上采集邮箱、图片或其他信息)、敏感词过滤、UBB翻译器。

采集邮箱:

 

保存图片:

 

网址处理:

 

敏感词过滤:

 

UBB翻译:

 

 

一些常用的正则表达式

正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。我将一些常用的表达式收藏在这里,作备忘之用。本贴随时会更新。 

匹配中文字符的正则表达式: [\u4e00-\u9fa5] 

匹配双字节字符(包括汉字在内)[^\x00-\xff] 

匹配空行的正则表达式:\n[\s| ]* 

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 

匹配首尾空格的正则表达式:(^\s*)|(\s*$) 

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? 


补充: 
^\d+$  //匹配非负整数(正整数 + 0) 
^[0-9]*[1-9][0-9]*$  //匹配正整数 
^((-\d+)|(0+))$  //匹配非正整数(负整数 + 0) 
^-[0-9]*[1-9][0-9]*$  //匹配负整数 
^-?\d+$    //匹配整数 
^\d+(\.\d+)?$  //匹配非负浮点数(正浮点数 + 0) 
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮点数 
^((-\d+(\.\d+)?)|(0+(\.0+)?))$  //匹配非正浮点数(负浮点数 + 0) 
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配负浮点数 
^(-?\d+)(\.\d+)?$  //匹配浮点数 
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串 
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串 
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串 
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串 
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串 
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$    //匹配email地址 
^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$  //匹配url

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23524 0
正则表达式的语法
正则表达式的语法
35 0
C#正则表达式大全
原文 C#正则表达式大全   这是我发了不少时间整理的C#的正则表达式,新手朋友注意一定要手册一下哦,这样可以节省很多写代码的时间。下面进行了简单总结。       只能输入数字:"^[0-9]*$"。
997 0
正则表达式
正则表达式 1.正则表达式的作用   1.1搜索指定模式的字符串   1.2验证字符串是否符合某种模式(比如,电话号码,邮件,密码等)   1.3替换字符串中指定模式的子字符串。适合用于批量替换一定规律的字符串2.
998 0
正则表达式
正则表达式 引入 需求: 校验一个QQ号码。 1. 首位不能为0; 2. 长度是4~10 3. 全部是数字组成 代码 /* 正则表达式: 概念:用于操作字符串的规则,在正则表达式中使用了一些特殊的符号代表了字符串的规则 需求: 校验一个QQ号码。
591 0
Python 正则表达式
最近研究Python爬虫,很多地方用到了正则表达式,但是没好好研究,每次都得现查文档。今天就专门看看Python正则表达式。本文参考了官方文档 re模块。
766 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19980 0
一起谈.NET技术,浅谈提升C#正则表达式效率
  说到C#的Regex,谈到最多的应该就是RegexOptions.Compiled这个东西,传说中在匹配速度方面,RegexOptions.Compiled是可以提升匹配速度的,但在启动速度上,使用了RegexOptions.Compiled情况下,通常会使启动速度慢许多,据说最多是60倍。
1085 0
+关注
杰克.陈
一个安静的程序猿~
10425
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载