zhenwu的个人站点

-----没事做的时候就要自找乐子

->从这里开始     寻找乐趣     善用工具     程序设计     IBM Mainframe     外语     下载      
VIM
秀丸
TotalCommand
Hoekey
Opera & Firefox
cmd脚本
Excel
VBA
正则表达式
【笔记】regular express应用一例20070607

昨天碰到一个问题,需要把:
zzz zzz www
 zzz zzz www
  zzz zzz www
   zzz zzz www
    zzz zzz www
   zzz zzz www 
  zzz zzz www
 zzz zzz www
zzz zzz www
这个文本本给替换为
zzz zzz www
Dzzz zzz www
DDzzz zzz www
DDDzzz zzz www
DDDDzzz zzz www
DDDzzz zzz www
DDzzz zzz www
Dzzz zzz www
折腾了好长时间最后用EmEditor的vbs脚本完成:
主要用到了向后一致指定和向后引用,查

匹配pattern为
(^ +)( )(?=[a-z])([a-z].*)
替换pattern为
\1D\3

其中( )(?=[a-z])为一个整体,(?=[a-z])是( )的向后一致指定
(^ +)( )(?=[a-z])([a-z].*)匹配任意行但是把行的结构分成了三段
替换\1D\3中的\1和\3为向后引用(back reference),
\1对应的(^ +)
\3对应的([a-z].*)也就是直接把\2给换成了D

用EmEditor的VBS脚本完成:

document.selection.Replace "(^ +)( )(?=[a-z])([a-z].*)","\1D\3",eeFindNext Or eeReplaceAll Or eeFindReplaceRegExp
document.selection.Replace "(^ +)( )(?=[a-z])([a-z].*)","\1D\3",eeFindNext Or eeReplaceAll Or eeFindReplaceRegExp
document.selection.Replace "(^ +)( )(?=[a-z])([a-z].*)","\1D\3",eeFindNext Or eeReplaceAll Or eeFindReplaceRegExp
document.selection.Replace "(^ +)( )(?=[a-z])([a-z].*)","\1D\3",eeFindNext Or eeReplaceAll Or eeFindReplaceRegExp
document.selection.Replace "(^ +)( )(?=[a-z])([a-z].*)","\1D\3",eeFindNext Or eeReplaceAll Or eeFindReplaceRegExp
document.selection.Replace "^\s","D",eeFindNext Or eeReplaceAll Or eeFindReplaceRegExp