当前位置:首页 > Windows程序 > 正文

C#中的正则表达式中的replace方法【转载】

2021-03-27 Windows程序

  其中如果包含的字符串中包含双引号,那么就两个双引号表示,而不是反斜杠加上双引号(\”),也不是斜杠加上双引号(/”)

    正则表达式获取CSS里面的图片的例子,里面有URL里面的图片地址有双引号,要注意用两个双引号""表示

static void Main(string[] args) { Regex reg = new Regex(@"url\(([‘""]?)(.+[^‘""])\1\)"); //注意里面的引号 要用双引号表示,而不是用反斜杠 Console.WriteLine(reg.Match(@"{background-image:url(//ssl.gstatic.com/ui/v1/menu/checkmark.png);backgro")); //输出 url(//ssl.gstatic.com/ui/v1/menu/checkmark.png) Console.ReadKey(); }

  带组名的后向引用在C#中是 \k<num> ,匹配重复单词的例子:

static void Main(string[] args) { Regex reg = new Regex(@"\b(?<group>\w+ +)\k<group>"); string str = "what the hell are you you talking about?"; Console.WriteLine(reg.Match(str)); Console.ReadKey(); }

  在C#中new一个Regex对象的时候,第二个参数能够用枚举支持选择匹配模式,现在就来说说这些枚举值对正则的影响。

   模式              说明

   .SingleLine           点号能够匹配任何字符    .Multiline            扩展^和$的匹配,使^和$能够匹配字符串内部的换行符    .IgnorePatternWhitespace   设计宽松排列和注释模式    .IgnoreCase          进行不区分大小写的匹配     .ECMAScript          限制\w \s \d,令其只对ASCII字符有效    .RightToLeft          传动装置的驱动过程不变,但是方向相反(从字符的末尾开始,向开头移动)    .Compiled           多花些时间优化正则表达式,编译到dll里,占用多点内存,但是匹配更快。    .ExplicitCapture        普通括号()在正常情况下是捕获型括号,但是在此模式下与(?:...)一样,之分组,不捕获

   RegexOptions.Compiled的意义

  使用RegexOptions.Compiled与不使用RegexOptions.Compiled的对比

  标准      不使用          使用

  启动速度    较快           较慢(最多60倍)   内存占用    少            多(每个正则表达式占用5-15KB)   匹配速度    一般           最多能提升10倍

  在使用了RegexOptons.Compiled时,在程序执行过程中,这块内存会一直被占用,无法被释放,因此仅对于那些经常被使用的正则表达式才适合使用此选项。

  ECMAScript模式

  要注意ECMAScript只能与下面的选项同时使用

  RegexOptons.IgnoreCase   RegexOptons.Multiline   RegexOptons.Compiled

  而且反斜线-数字不会有反向引用和十进制转移的二义性,因为它只能够表示反向引用。例如 \10 表示反向引用 \1 然后是文字0。如果没有启用该模式,则 \12 匹配的是ASCII进纸符linefeed。同时\w \d \s \W \D \S只能匹配ASCII。

  另外在C#中,分组的编号也需要注意。

  分组0是整个正则表达式匹配到的结果。

  然后依次是未命名分组。

  最后是命名分组。

  例如:

  (\w)(?<Num>\d+)(\s+)

   1   3     2

  特殊的Replacement处理

  Regex.Replace方法和Match.Result方法都可以接收能够进行特殊处理的replacement字符串。下面的字符序列会被匹配到的文本所替换:

  字符序列          替换内容

  $&              整个表达式匹配的文本,相当于$0

  $1  $2            对应编号的捕获分组所匹配的文本

  ${name}          对应命名捕获分组匹配的文本

  $‘             目标字符串中匹配文本之前的文本

  $‘             目标字符串中匹配文本之后的文本

   $$             单个$字符($1的显示为$$!)

  $_             正则原始目标字符串的副本

  $+             .NET中表示最后的那个捕获型括号匹配的文本

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68376.html