jony413

多媒体信息发布、排队叫号、医院分诊、电子班牌

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

VARCHAR2(^([0-9]*^))

VARCHAR2(^1 char)

 

说起来 用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从何而来?惊奇 研究 冥冥中似有所悟

继续查资料 又发现另外一句话:

相应的替换表达式是 ^x,x 的范围是 1-9。例如: 如果 ^(h*o^) ^(f*s^) 匹配“hello folks”,那么^2 ^1 表示将用“folks hello”替换它。

 

啊哈 是这样了 一个^( ^)内的表达式 为一个替换区域 也就是^1 ^2对应的通配符!

第四步:改进搜索方式

 "^((*)^)|

替换为

(^1)|"

执行 发现 "(A)|被替换成了((C))|"

虽然不是我想要的结果 但是序号已经出现 也就是说离成功很近了 逐渐摸索 得到最终正确结论也是顺理成章的:

 

结论:

  1. ctrl+R打开替换窗口 勾上正则表达式选项
  2. 在查找框输入 ^("^)^((*)^)^(|^)  (红色部分)
  3. 在替换框输入 ^2^3^1  (红色部分)
  4. 全部替换 OK

解释:搜索表达式分三部分   ^("^)   ^((*)^)       ^(|^)   看明白了吧?

posted on 2012-08-20 21:09  jony413  阅读(288)  评论(0编辑  收藏  举报