||
我用过很多文本编辑器,以前很喜欢用UltraEdit,后来又改用Sublime Text 3, 这两年又改到EditPlus和Typora了,要格式控制的用Typora,一般的文本处理用Editplus,后者体积小,启动快,功能也不差,很适合我这种喜欢快速启动快速编辑的风格。
EditPlus有一点很好,支持正则表达式的查找替换,为一些复杂的文本查找提供了很大的方便,很对我的胃口。但又发现它对正则的支持又不够强,比如我想查找以下文本的数字 1923, 1924,在它前面加上ZHY前缀,但是对已经有了ZHY前缀的则不加处理.
We developped additives like 1923, 1924, ZHY1965 and others compounds.
正则表达式这样设计:
查找
(?<!ZHY)(\d{4})
替换
ZHY\1
但是在EditPlus, 不支持这种否定逆序环视(negative lookbehind)的正则查找.
如果我经常要进行这种形式的查找,怎么办呢?我能不能将文本导到外部程序去进行处理,再替换回来呢?
结果是可以的,因为EditPlus提供了一些自定义工具的机制,我们可以这么做.
先写一段处理这种文本的Ruby脚本,如下
这个脚本存放在D:\greensoft\下。 再配置EditPlus的自定义工具,配置方法如下
这样配置好了之后,在编辑器中选中要替换的文本,再点击自定义工具的命令,就替换好了,非常方便。如果需要其它更复杂的处理,比如将数字转换成中文或大写的金额什么的,写不同的脚本就可以。
背后的原理也简单说一下,1. 选中文本之后,点击自定义工具,EditPlus就会将选中的内容传递到$(CurSel)这个变量中,我给它加上双引号,是为了保证文本完整的作为一个参数传递,即使有空格或逗号等分隔符,也不会被命令行拆解为多个参数。2.参数(这段文本)传递给脚本之后,脚本中以特定的ARGV变量名被代码读取,它先对参数进行一个组合形成一个字符串(只有一个参数时不这么做也可以),使用字串符的gsub!方法全部替换, 该方法的第1个参数是查找的正则样式,就是上面设计的那个,第二个是用于替换的新文本,Ruby中使用双引号时,反斜框要转义,所以写成 "\\1"
,不过用单引号形式的'\1'
也可以的. 3.用print输出到控制台,如果用puts输出,会在末尾附加一个换行符,返回EditPlus时会多一个换行,一般我们不希望这样。
当然, 要运行这个脚本,电脑上要有Ruby解释器,这是运行脚本的前提.网上找找就有,免费的. https://rubyinstaller.org/downloads/
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 00:40
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社