C#中的正则表达式

本文详细介绍了C#中的正则表达式,包括简单的正则表达式、元字符、字符转义、限定符、反义、替换、分组语法、贪婪与懒惰等核心概念,并给出了多个实例,如电话号码、邮箱地址、URL等的匹配规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是正则表达式?正则表达式又称规则表达式,英文名为Regular Expression在代码中简写为regex、regexp或RE。正则表达式通常被用来检索、替换那些符合某个模式的文本

1.0简单的正则表达式

例:him,history,high,hi在这个字符串中匹配出hi

正则表达式:hi

若要精确的匹配出hi,正则表达式:\bhi\b

\b是正则表达式规定的一个特殊代码,我们把它叫做元字符,单词的开头或结尾,也就是单词的分界处,它只匹配一个位置

1.1元字符的讲解

代码 说明

. 匹配处换行符以外的任意字符

\w 匹配数字字母或下划线或汉字

\s 匹配任意空白符

\d 匹配数字

\b 匹配单词的开始或结束

^ 匹配字符串的开始

$ 匹配字符串的结束

1.2字符转义‘\’

如果你想查找元字符本身的话,比如你查找.,或者*,就出现问题:你没法指定他们,因为他们会被解释成其他的意思。这时你就必须使用\来取消这些字符的特殊意义。因此,你因该使用.和*当然,要查找\本身,你也的用\\。

1.3常用的限定符(重复)

代码 说明

* 重复零次或更多次

+ 重复一次或更多次

? 重复零次或一次

{n} 重复n次

{n,} 重复n次或更多次

{n,m} 重复n到m次

1.4反义

代码/语法 说明

\W 匹配任意不是字母,数字,下划线,汉字的字符

\S 匹配任意不是空白符的字符

\D 匹配任意非数字的字符

\B 匹配不是单词开头或结束的位置

[^x] 匹配除了x以外的任意字符

[^aeiou] 匹配除了ariou这几个字母以外的任意字符

1.5替换

问题2:写一个正则表达式用于匹配几种格式的电话号码

例如:(010)88886666,或020-22334455,或02912345678

正则表达式:\(0\d{2}[)]\d{8}|0\d{2}[- ]?\d{8}

特别说明:使用替换时,顺序很重要的\d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。

美国邮编的规则时5位数字,或者用连字号间隔的9位数字

如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。

原因是匹配替换时,将会从左到右地测试每个分支条件,如果满足了某个分支的话,就不会管其他单独替换条件了。

1.6分组语法

零宽断言

(?=exp) 匹配exp前面的位置

(?<exp) 匹配exp后面的位置

(?!exp) 匹配后面跟的不是exp的位置

(?<!exp) 匹配前面不是exp的位置

1.7贪婪与懒惰

贪婪:当正则表达式中包含能接受重复限定符时,通常的行为是(在使整个表达式能得到匹配的前提下匹配尽可能多的字符)。这也被称为贪狼匹配

懒惰:有时,我们需要懒惰匹配,也就是匹配尽可能的少的字符。

如果将前面给出的限定符转换为懒惰匹配模式,只需要在它后面加上一个问号?

懒惰限定符

*? 重复任意次,但尽可能少重复

+? 重复1次或更多次,但尽可能少重复

?? 重复0次或1次,但尽可能少重复

{n,m}?重复n到m次,但尽可能少重复

{n,}?重复n次以上,但尽可能少重复

下面在给大家分享一些有用的C#正则表达式

"^\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 
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码 
C#正则表达式 
图片 src[^>]*[^/].(?:jpg|bmp|gif)(?:\"|\') 

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

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

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

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

匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数) 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值