说起来 用UltraEdit也是七八年了 用正则表达式查找也是四五年了 就是替换一直没有深入研究 原先也琢磨过几次 均是无功而返 今天客户给了一个要求 觉得可以用正则表达式做到 经过半小时摸索 终于初窥门径 了却心头一桩憾事 欣喜之余 以此为记
正文:
客户文件如下:
....
}li "(A)|IN GENERAL.-If t(后半部分略 下同)
}ls i
}li "(i)|the percentage d
}li "(ii)|any increase in
}li "(B)|DETERMINATION OF
}pg 148
}ls i
}li "(i)|the percentage d
}li '(ii)|the sum of the
}li "(C)|AGGREGATE CONTRA
....
要求:
将 "(序号)| 改为 (序号)|" 序号为123 ABC abc i ii iii....
思路:
首先给出查找的正则表达式 很简单 直接用*替代序号即可(下面所有的搜索都需要UltraEdit的搜索框勾上"正则表达式"选项 不赘述) 搜索表达式如下:
"(*)|
一搜 果然成功 窃喜ing
接下来就是难题了 如何将序号在替换框内表示出来 以前看资料 查帮助 早知道UE中代替表达式是^x x的范围是 1-9 但问题是一直不知何者为替换表达式中的^1呢? 很明显我的搜索表达式第一个也是唯一一个标注表达式是这个 * 了
第一步:直接在替换表达式中写
(^1)|"
执行替换 不出所料的没有成功 将搜到的第一个 "(A)| 替换成了 ()|" 也就是说 ^1没有取到值
第二步:抓狂ing
第三步:再查资料 发现网上有个例子 :
将一段合并为一行: 替换 [ ^t]++^p^([~ ^t^p]^) 为 ^1
一试 果然可以 但是他的里面并没有用到* ?之类的通配符啊 ^1从何而来?惊奇 研究 冥冥中似有所悟
继续查资料 又发现另外一句话:
啊哈 是这样了 一个^( ^)内的表达式 为一个替换区域 也就是^1 ^2对应的通配符!
第四步:改进搜索方式
"^((*)^)|
替换为
(^1)|"
执行 发现 "(A)|被替换成了((C))|"
虽然不是我想要的结果 但是序号已经出现 也就是说离成功很近了 逐渐摸索 得到最终正确结论也是顺理成章的:
结论:
- ctrl+R打开替换窗口 勾上正则表达式选项
- 在查找框输入 ^("^)^((*)^)^(|^) (红色部分)
- 在替换框输入 ^2^3^1 (红色部分)
- 全部替换 OK
解释:搜索表达式分三部分 ^("^) ^((*)^) ^(|^) 看明白了吧?