当前位置: 首页 > news >正文

C#正则表达式(RegEx)高级应用之分组(Group)替换(Replace)

对于复杂的、符合一定规则的字符串替换来说,正则表达式无疑是强悍和高效的选择 对于正则表达式的使用,我也写过几篇帖子了,具体可以见下面的地址 http://zu14.cn/tag/regex/ 今天,说一下 .NET 里面 正则 使用的稍微高级一些的技巧:分组替换 ,下面我们举两个实例来说明这个问题: 一段字符串,把其中出现的 Ax,Ay 形式的内容,替换为 Ax 的形式(也就是 ,和Ay 都不要了),其中x 和y是数字,位长是 1~2,并且不会出现连排的形式 对于上面的需求,我们进行分析后,可以得出:上面的匹配规则,分为2组,(Ax) 一组,(,Ay) 一组 匹配后,直接返回第一组就OK了 对于.NET来说,分组替换的实现,有多种方式,我这里展示其中的2种,对于上面的例子,我使用 MatchEvaluator 方式 static string CustomReplace(System.Text.RegularExpressions.Match m) { return m.Groups[1].Value; //直接返回分组1 } string sourceString = "....."; string pattern = @"(A\d{1,2})(,A\d{1,2})"; System.Text.RegularExpressions.MatchEvaluator myEvaluator = new System.Text.RegularExpressions.MatchEvaluator(CustomReplace); System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase| System.Text.RegularExpressions.RegexOptions.Multiline); string resultString = reg.Replace(sourceString, myEvaluator); <script type="text/javascript"><!-- google_ad_client = "pub-5834986413902221"; /* 728x90 */ google_ad_slot = "1368486102"; google_ad_width = 728; google_ad_height = 90; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 一段HTML代码,是用来插入FLASH的,形式如: <embed width=”1000” src=”…” …></embed> 需求是需要对这个FLASH的代码进行自定义,将 宽度 替换为自定义的值 对于这个例子,我们使用分组号 $# 的方式来实现,#代表数字,经过分析,可以得出,将上面的内容,分为3组 string sourceString = "......"; string toWidth = "300"; //自定义的宽度 string pattern = "(<embed .+? width\\s{0,}=\\s{0,}\"{0,1})(\\d+)(\"{0,1})"; System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline); string resultString = reg.Replace(sourceString, "${1}" + toWidth + "${3}");

相关文章:

  • algorithm.sty not found error in LaTeX 解决方法
  • C# regex replace
  • linux 的 awk 使用
  • Linux启动检测磁盘失败
  • 简历已经过时了,而这里正是你需要的
  • 虚拟机RAC的ASM磁盘组坏块导致重建DB
  • ASP.NET 5 入门 (2) – 自定义配置
  • hadoop进阶
  • 程序员编程艺术第一~二十二章集锦与总结(教你如何编程)
  • C语言的内存分配
  • 级别
  • 函数指针和指针函数
  • Oracle集合
  • DataTable.Select方法
  • VMware Workstation与VM ware Esxi使用OVF文件交互
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • C++11: atomic 头文件
  • css选择器
  • FineReport中如何实现自动滚屏效果
  • IDEA常用插件整理
  • JavaScript函数式编程(一)
  • JAVA之继承和多态
  • js ES6 求数组的交集,并集,还有差集
  • node.js
  • tensorflow学习笔记3——MNIST应用篇
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 简单数学运算程序(不定期更新)
  • 京东美团研发面经
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 山寨一个 Promise
  • 我看到的前端
  • 新版博客前端前瞻
  • 学习使用ExpressJS 4.0中的新Router
  • 智能合约Solidity教程-事件和日志(一)
  • 选择阿里云数据库HBase版十大理由
  • # 数论-逆元
  • #{}和${}的区别?
  • #etcd#安装时出错
  • ${ }的特别功能
  • (4.10~4.16)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (MATLAB)第五章-矩阵运算
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (六)vue-router+UI组件库
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (一)Linux+Windows下安装ffmpeg
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)