正则式中的实用命名组替换
刚在论坛上看到一个非常有意思的问题?
result = Regex.Replace(result, @"( <a(?=[^ <> ]*?id=""t1"").*?href="")[^""]*(""[^> ]*> )[\s\S]*?(?= </a> )", string.Format("$1{0}$2{1}", textBox12.Text, textBox11.Text), RegexOptions.IgnoreCase);
我用上面的正则表达式想分别替换 <a id="t1" class=link_blue href="http://article.ednchina.com/Commu/20071219071733.htm"> Infonetics:WiMAX设备销售额上升势头增强 </a> 中的红色部分,可是如果textBox12.Text中的字符是以数字开始的,替换就出现了问题,原文就被替换成为 <a id="t1" class=link_blue href="http://article.ednchina.com/Other/20080108052252.htm$22008国际CES更“绿”了 </a>
为什么把后面> 改为了$2,请问应该怎么解决呢?
原以为只是一个简单的正则替换问题,出现问题可能是正则式或是其它书写的原因.
仔细分析了一下,确实存在问题,事实证明不能小视任何的一个问题哈^_^
举个例子来说明问题:
string reValue = "1212";
string reValue1 = "CSDN";
string regex = "(<a[\\s\\S]*?id=\"t1\"[\\s\\S]*?href=\")[\\s\\S]*?(\"[^>]*?>)[^<]*?(\\</a>)";
string result = Regex.Replace(a, regex,string.Format("$1{0}$2{1}$3", reValue, reValue1));
上面的例子是一个普通的正则替换例子,一般情况下不会出现任何问题,不过并不是没有问题,以上的参数中就会出现我们所说的问题了,我们的reValue为1212为数学,当字符串连接起来的时候,你们的替换表达式就会生成为:
$11212$2CSDN$3这种形式.地球人都知道得不到正确的替换...
很明显现在非常命名组的引用已经不能解决我们的问题,所以我们今天所说的主角上场了.
${name}替换由组(?<name>)匹配的最后一个子串.
用这种方式去捕获匹配值,当然也就不会与数学冲突了,即写成
这种命名组替换模式,当然我们的替换模式都改了,当然我们的正则表达式也需要改了,几些天太大意了,忘记把修改成命名组匹配的正则表达式贴上来了,谢谢楼下朋友的提醒^_^,现在补上
修正为命名组匹配的正则表达式就应该为:
很郁闷,异常--!,输入字符串的格式不正确
很容易原因应该就是在string.Format中使用了花括号{},所以编译器就会把它误认为是一个格式项,也不知道是不是这样称呼^_^,还望朋友们指正,(下面的内容摘自MSDN)
格式项的语法是 {index[,alignment][:formatString]},它指定了一个强制索引、格式化文本的可选长度和对齐方式,以及格式说明符字符的可选字符串,其中格式说明符字符用于控制如何设置相应对象的值的格式。格式项的组成部分包括:
index
从零开始的整数,指示对象列表中要格式化的元素。如果由 index 指定的对象是 空引用(在 Visual Basic 中为 Nothing),则格式项将被空字符串 ("") 替换。
alignment
可选整数,指示包含格式化值的区域的最小宽度。如果格式化值的长度小于 alignment,则用空格填充该区域。如果 alignment 为负,则格式化的值将在该区域中左对齐;如果 alignment 为正,则格式化的值将右对齐。如果没有指定 alignment,则该区域的长度为格式化值的长度。如果指定 alignment,则需使用逗号。
formatString
可选的格式说明符字符串。如果没有指定 formatString,并且对应的参数实现了 IFormattable 接口,则将 空引用(在 Visual Basic 中为 Nothing) 用作 IFormattable.ToString 格式字符串。因此,IFormattable.ToString 的所有实现都必须允许 空引用(在 Visual Basic 中为 Nothing) 作为格式字符串,并以 String 对象的形式返回对象表示形式的默认格式设置。如果指定 formatString,则必须使用冒号。
必须使用前导大括号字符和后缀大括号字符,即“{”和“}”。若要在 format 中指定单个大括号字符,请指定两个前导大括号字符或后缀大括号字符(即“{{”或“}}”)。
问题弄清楚了,解决方案也找到了^_^
只需要把上面的替换表达式改为
问题就可以得到解决,也可以不采用string.Format格式项的方式.直接采用原始的字符串拼接,也可实现
哎,总算说清楚了,不过貌似有很多费话,希望朋友们表丢砖头^_^
转载于:https://www.cnblogs.com/symbol441/archive/2008/01/09/1031604.html
正则式中的实用命名组替换相关推荐
- 《Python Cookbook 3rd》笔记(2.10):在正则式中使用 Unicode
在正则式中使用 Unicode 问题 你正在使用正则表达式处理文本,但是关注的是 Unicode 字符处理. 解法 默认情况下 re 模块已经对一些 Unicode 字符类有了基本的支持.比如, \d ...
- python中pos的用法_Python正则式的基本用法
Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...
- 在Flash中利用PCRE正则式漏洞CVE-2015-0318的方法
blast · 2015/03/02 10:49 0x00 前言 标题:(^Exploiting)\s(CVE-2015-0318)\s(in)\s*(Flash$) 作者:Mark Brand is ...
- Python 正则式学习笔记
1. Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2. re模块的基本函数 2.1使用compile加速 ...
- [JS]正则式的使用示例:替换字符串中所有指定内容
JS中是没有replaceAll这个api 的,想要替换一个字符串中所有的指定内容,需要用到正则式. 对正则式了解甚少也不要紧,看下面这个demo(一看就会) 现在需要把一个字符串里的所有#号换成空格 ...
- 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替...
/// <summary>/// 正则双重过滤/// splitKey1 第一个正则式匹配/// splitKey2 匹配结果中再次匹配进行替换/// </summary>// ...
- 正则式获取特定标识的字符串并替换
2019独角兽企业重金招聘Python工程师标准>>> 正则式获取特定标识的字符串, 待处理字符串:#applyCom# 已经对单号为"#applyNo#"的&q ...
- 正则匹配字符串有则替换无则添加;用正则实现添加和替换字符串,原字符串中包含某字段就替换(覆盖),不包含某字段就添加!
正则匹配字符串有则替换无则添加 一.首先确定我们的字符串文本例:有一个网上商城项目在书本的详细描述中有这样一段话:"这是一本某某写Java书共1000章.....[ 书本编号:107 ]&q ...
- EXCEL中怎么把单元格中的数值提取出来?Excel提取单元格数字或某格式的字符串,支持正则式提取的绿色工具
使用Excel时,经常面临: Excel单元格中既有文字又有数字,怎样快速提取其中的数字?在EXCEL表格里,怎么提取某一单元格中的一部分文字?单元格中的数字或数值如何拆分出来,Excel 提取表格内 ...
- 正则式简介及常用正则式
好像很多公司招程序员都会考正则式,故搜了些东西与大家共享 (在此向原作者致敬!) 刚准备学,自己也不懂.下面的一篇文章讲的是PHP语言的正则式,好像各语言略有不同,有个讲java正则式的ppt,下面给 ...
最新文章
- 用JS的正则表达式如何判断输入框内为中文或者是英文
- fastadmin弹框提示不起作用 confirm
- mysql5.7.25数据库安装
- 2021年11月编程语言排行榜出炉
- BZOJ-1922 大陆争霸 多限制、分层图最短路 (堆+dijkstra)
- python基础知识-Python基础知识
- IPC生产者与消费者模型加线程
- 【3】Keras.applications包,一堆可以复用的深度学习模型库
- ASP.NET的路由系统
- SPSS 多重共线性问题【SPSS 039期】
- 软件测试做简历专业技能这样写,还怕没面试机会?
- deepnode软件下载地址_天正软件全套安装包下载地址
- 免费申请国外免费域名超详细教程
- 数据库出错提示Duplicate entry * for key *的解决方法
- 使用协同过滤推荐算法进行电影推荐
- 计算机网络连接限制,网络受限制或无连接怎么办?电脑网络连接受限制或无连接问题...
- 用了这么多年百度搜索, 今天才发现加上双引号搜索结果这么准
- 小白不知道raw批量转换jpg怎么转?分享好用的方法
- Oracle创建定时任务教程
- sql server 2005快捷键
热门文章
- Linux开机启动一些知识点
- 使用 Kotlin , Groovy ,Java 开发一个自己的 Gradle 插件
- Kotlin从入门到放弃(三)——协程
- 理解 Delphi 的类(三) - 初识类的属性
- REDGATE又一好用的脚本工具ScriptsManager1.3
- 提高Web页面的性能(一)
- VBS中转换二进制数据为字符串常用办法
- 通俗理解激活函数作用和常见激活函数总结:sigmoid、tanh、relu、Leaky-relu、P-relu、R-Relu、elu
- 9-汇编转移指令-offset+jmp+jcc+loop
- decaNLP-一个可以同时处理机器翻译、问答、摘要、文本分类、情感分析等十项自然语言任务的通用模型