正则表达式是对文本进行抽象匹配并替换的好东东,最近刚刚小有研究,再加上VIM的巨强大支持,简直就是无所不能啊!
下面是最近研究的一些用正则表达式在VIM上对码表进行的处理,和大家分享下.
GVIM7.2下载地址:ftp://ftp.vim.org/pub/vim/pc/gvim72.exe
适用于XP,并且以下正则表达式都是在此版本上测试并完成的,不保证其它系统和软件版本适用.
虽说可以只用一条命令就可以达到效果,但通过测试,排序功能的确会比较影响运行效率,所以为了不影响速度,把筛选和排序分开运算.
另外还有一些是需要空格替换回车的,那些命令也不能同时运行.
:sort ur/a+/ //此为排序,当然如果不想排也可以不使用.此排序功能可以删除完全相同的任意行,只保留一行,并按字母的顺序进行排序.
:%s/ /
/g //此为将筛选出来的有空格分隔的结果用回车替换空格,使其保持一致性.
用vim打开要修改的词库文档,所有分两行的命令,都必须先输入":",进入VIM命令模式,输入或复制粘贴第一行,回车,运行完毕后,再第二行,回车.即可.
最后,友情提示,下面列出的所有正则表达式只适用于极点格式的词库文档哦.也就是:
[text] //以下
{
...
...
...
} //z以上的纯码表加空格分隔的单字及词组
----------------------------------------------------------------------------
一级简码:
:%s/^a{2,}.*$//g | %:g/^$/normal dd
:sort ur/a+/
二级码:
:%s/^a{3,4}.*$|^a{1} .*$//g | :%g/^$/normal dd
:sort ur/a+/
3J码:
:%s/^a{1,2} .*$|^a{4}.*$//g | :%g/^$/normal dd
:sort ur/a+/
四级码:
:%s/^a{1,3} .*$//g | :%g/^$/normal dd
:sort ur/a+/
删除所有二字及二字以上词组:
:%s/ ~@<![^~ ]{2,}//g | :%g/^a+s*$/normal dd
:sort ur/a+/
删除所有三字及三字以上词组:
:%s/ ~@<![^~ ]{3,}//g | :%g/^a+s*$/normal dd
:sort ur/a+/
删除所有四字及四字以上词组:
:%s/ ~@<![^~ ]{4,}//g | :%g/^a+s*$/normal dd
:sort ur/a+/
删除所有五字以上短句:
:%s/ ~@<![^~ ]{5,}//g | :%g/^a+s*$/normal dd
:sort ur/a+/
导出所有常用单字:
有码表:
:%s/ ~{1}S+| S{2,}//g | :%g/^a+s*$/normal dd
:sort ur/a+/
无码表:
:%s/ ~{1}S+| S{2,}//g | :%s/a+s*//g | :%g/^$/normal dd
:%s/ /
/g
导出所有生僻字:
:%s/ ~@<![^~ ]+//g | :%s/^a+s*$//g | :%g/^$/normal dd
:sort ur/a+/
删除所有生僻字:
:%s/ ~S+//g | :%g/^a+s*$/normal dd
:sort ur/a+/
导出二字词组:
有码表:
:%s/ ~{1}S+| S{3,}| S{1}S@!//g | :%g/^a+s*$/normal dd
:sort ur/a+/
无码表:
:%s/ ~{1}S+| S{3,}| S{1}S@!//g | :%s/a+s*//g | :%g/^$/normal dd
:%s/ /
/g
导出三字词组:
有码表:
:%s/ ~{1}S+| S{4,}| S{1,2}S@!//g | :%g/^a+s*$/normal dd
:sort ur/a+/
无码表:
:%s/ ~{1}S+| S{3,}| S{1}S@!//g | :%s/a+s*//g | :%g/^$/normal dd
:%s/ /
/g
导出四字成语:
有码表:
:%s/ ~{1}S+| S{5,}| S{1,3}S@!//g | :%g/^a+s*$/normal dd
:sort ur/a+/
无码表:
:%s/ ~{1}S+| S{5,}| S{1,3}S@!//g | :%s/a+s*//g | :%g/^$/normal dd
:%s/ /
/g
导出五个字以上的短句:
有码表:
:%s/ ~{1}S+| S{1,4}S@!//g | :%g/^a+s*$/normal dd
:sort ur/a+/
无码表:
:%s/ ~{1}S+| S{1,4}S@!//g | :%s/a+s*//g | :%g/^$/normal dd
:%s/ /
/g
仅删除码表头:
:%s/^a+ //g
---------------------------------------------------------------------------
但仍然有一个棘手的问题,在对分类出来的词库进行修改后,需要一个合并相同码表头的不同单字或词组,虽说VIM甚至有更强大的功能,但对于一些比较个性化的需求还是需要自己动手啊,可惜我C学的半桶水,还有待进一步研究学习,看来还得等日后再研究解决这个合并问题.
所有表达式都亲测通过,如果发现什么问题或错误再或者还有什么特殊的需求请留言,我尽量满足.