.NET 正则表达式使用高级技巧之替换类介绍_正则表达式

\d表示什么,{,5}表示什么,\[表示什么……,这里我只想提醒大家一点,为了避免和反向引用相冲突,在你用\nn表示八进制的ASCII码时,请在\后加0,就是说,\40在表示ASCII码时,请这样写\040。 

  替换 

  Regex类有一个静态的Replace方法,其实例也有一个Replace方法,这个方法很强大,因为它可以传入一个delegate,这样,你可以自定义每次捕获匹配时,如何处理捕获的内容。

 

  以上这段代码说明了如果使用delegate MatchEvaluator 来处理正则的Match结果,该代码返回"01 12 03 05"。Replace方法除了使用delegate来处理捕获的Match,还可以用字符串来替换Match的结果,而用字符串来替换Match结果除了把Match结果静态的替换成一个固定的文本外,还可以使用以下语法来更方便的实现你需要的功能: 

复制代码 代码如下:

public static void Main()
{
string s = "1 12 3 5";
s = Regex.Replace(s,@"\d+",new MatchEvaluator(CorrectString),RegexOptions.Compiled|RegexOptions.IgnoreCase);
Console.WriteLine(s);
Console.ReadLine();
}
private static string CorrectString(Match match)
{
string matchValue = match.Value;
if(matchValue.Length == 1)
matchValue = "0" + matchValue;
return matchValue;
}

$number
  把匹配的第number组替换成替换表达式,还有这句话怎么写也表达不清楚意思,还是来个例子吧:

 public static void Main() 
 { 
 string s = "1 12 3 5"; 
 s = Regex.Replace(s,@"(\d+)(?#这个是注释)","0$1",RegexOptions.Compiled|RegexOptions.IgnoreCase); 
 Console.WriteLine(s); 
 Console.ReadLine(); 
 }

  这段代码返回的是 “01 012 03 05” 

  就是说,对组一的每个匹配结果都用"0$1"这个表达式来替换,"0$1"中"$1"由组1匹配的结果代入

${name}   把匹配的组名为"name"的组替换成表达式, 

  上例的Regex expression改成@"(?<name>\d+)(?#这个是注释)"后面的替换式改为"0${name}"结果是一样的

$$   做$的转义符,如上例表达式改成@"(?<name>\d+)(?#这个是注释)"和"$$${name}",则结果为"$1 $12 $3 $5"
$&   替换整个匹配
$`   替换匹配前的字符
$'   替换匹配后的字符
$+   替换最后匹配的组
$_   替换整个字符串

  
  后面的选项,大家自己写个例子体味一下。 

  *注,上例中的(?#这个是注释)说明了正则的内联注释语法为(?#) 

  表达项选项 

  正则表达式选项RegexOptions有如下一下选项,详细说明请参考联机帮助 

RegexOptions枚举值 内联标志 简单说明
ExplicitCapture n 只有定义了命名或编号的组才捕获
IgnoreCase i 不区分大小写
IgnorePatternWhitespace x 消除模式中的非转义空白并启用由 # 标记的注释。
MultiLine m 多行模式,其原理是修改了^和$的含义
SingleLine s 单行模式,和MultiLine相对应

  
  这里我提到内联标志,是因为相对于用RegexOptions在new Regex时定义Regex表达式的全局选项来说,内联标志可以更小粒度(以组为单位)的定义匹配选项,从而更方便表达我们的思想 

  语法是这样的:(?i:expression)为定义一个选项,(?-i:expression)为删除一个选项,(?i-s:expression)则定义i,删除s,是的,我们可以一次定义很多个选项。这样,通过内联选项,你就可以在一个Regex中定义一个组为匹分大小写的,一个组不匹分大小写的,是不是很方便呢?

时间: 2024-08-03 20:13:03

.NET 正则表达式使用高级技巧之替换类介绍_正则表达式的相关文章

.NET 正则表达式使用高级技巧之替换类介绍

\d表示什么,{,5}表示什么,\[表示什么--,这里我只想提醒大家一点,为了避免和反向引用相冲突,在你用\nn表示八进制的ASCII码时,请在\后加0,就是说,\40在表示ASCII码时,请这样写\040.  替换  Regex类有一个静态的Replace方法,其实例也有一个Replace方法,这个方法很强大,因为它可以传入一个delegate,这样,你可以自定义每次捕获匹配时,如何处理捕获的内容.   以上这段代码说明了如果使用delegate MatchEvaluator 来处理正则的Ma

.NET正则表达式使用高级技巧之替换类

高级|技巧|正则 因为.net的基本正则语法和Perl5基本相同,所以基本语法你可以去下载一下M$的JS帮助文档,上面有详细的说明\d表示什么,{,5}表示什么,\[表示什么--,这里我只想提醒大家一点,为了避免和反向引用相冲突,在你用\nn表示八进制的ASCII码时,请在\后加0,就是说,\40在表示ASCII码时,请这样写\040. 替换 Regex类有一个静态的Replace方法,其实例也有一个Replace方法,这个方法很强大,因为它可以传入一个delegate,这样,你可以自定义每次捕

php正则表达式中贪婪与非贪婪介绍_正则表达式

一.贪婪与非贪婪 什么叫贪婪,比如说要从字符串中<td>面包一</td><td>面包二</td>吃面包,本来你只可以吃面包一,可是你贪心,于是就把第一个<td>到最后一个</td>里面的两个面包取出来了,你想多吃点,非贪婪也就是你不贪吃了,就只吃面包一. 我们来看看正则里面是怎么贪婪的 <?php $str = '<td>面包一</td><td>面包二</td>'; preg_ma

C# 正则表达式 使用介绍_正则表达式

为了避免以后这样的情况,在此记录下正则表达式的一些基本使用方法附带小的实例.让以后在使用时能一目了然知道他的使用,为开发节约时间,同时也分享给大家 正则元字符 在说正则表达式之前我们先来看看通配符,我想通配符大家都用过.通配符主要有星号(*)和问号(?),用来模糊搜索文件.winodws中我们常会使用搜索来查找一些文件.如:*.jpg,XXX.docx的方式,来快速查找文件.其实正则表达式和我们通配符很相似也是通过特定的字符匹配我们所要查询的内容信息.已下代码都是区分大小写. 常用元字符 代码

正则表达式教程之模式修正符使用介绍_正则表达式

之前我们给大家介绍了正则表达式中的定界符.原子和元字符,那么我们关于正则表达式教程的基本语法就剩下了正则表达式中的模式修正符.本节会向大家介绍模式修正符的概念.模式修正符的构成,以及结合实例的模式修正符的演示,大家在学习完本节内容之后,就完全可以读懂正则表达式了. 什么是模式修正符? 1, 模式修正符就是几个字母,我们在每个正则表达式中可以一次使用一个,也可以连续使用多个,每一个具一定的意义. 2, 模式修正符是对整个正则表达式调优使用,也可以说是对正则表达式功能的扩展. 还记得正则表达式的那个

JS 正则表达式用法介绍_正则表达式

正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.其作用如下:测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证.替换文本.可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字.根据模式匹配从字符串中提取一个子字符串.可以用来在文本或输入字段中查找特定文字. 基本语法 在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表

半小时精通正则表达式 经典实例介绍_正则表达式

开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明 如果您是新手,猜你取消 正则表达式30分钟入门教程"^The": 开头一定要有"The"字符串; "of despair$": 结尾一定要有"of despair" 的字符串; 那么, "^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配 "notice": 匹配包含no

匹配中文汉字的正则表达式介绍_正则表达式

\w匹配的仅仅是中文,数字,字母,对于国人来讲,仅匹配中文时常会用到,见下 复制代码 代码如下: 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 或许你也需要匹配双字节字符,中文也是双字节的字符 复制代码 代码如下: 匹配双字节字符(包括汉字在内):[^\x00-\xff] 注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) PS:关于正则,本站还提供了2款非常简便实用的正则表达式工具供大家参考使用: JavaScript正则表达式在线测试工具: http:/

正则表达式 口诀 学习正则的朋友看看_正则表达式

正则是每个程序员绕不开的堡垒,只有把它攻下来.我觉得正则之所以难,第一难是需要记忆,第二难是要求具备抽象逻辑思维. 签于网上太多的介绍都是一篇凶悍的短文,边看边理解可以,帮助记忆不行.又受五笔字型字根表口诀"白手看头三二斤..."的启发, 试作"正则表达式助记口诀"又名"正则打油诗",版本0.1,绝对原创,仿冒必究,:) 注:本文仅为学习正则时为了便于记忆而作,不能代替系统而全面的学习过程,错漏之处,敬请指正! 正则其实也势利,削尖头来把钱揣: