前一篇我们讲到了如何利用EmEditor的正则表达式来批量替换字符串,达到整理词库的目的,表面上看,词库制作的工作应该是告一段落,但舍得知道,仅仅靠前面的一个实例想要掌握好正则表达式这个工具,完成词库处理的工作,那是很难实现的。所以舍得再写一个实例,在这个实例中,舍得会尽可能多地分享正则表达式在具体应用中的各种技巧,通过本文达到精通正则表达式肯定不现实,但你把这里的“三招两式”琢磨明白了,经过一定时间的训练,至少在“词库整理”这个应用范围,应该可以做到“游刃有余”了吧!
五、应用实例
先把下载好的柯林斯分级词汇表解压出来(不是舍得制作的那个精减版),这里舍得选择Collins5E.txt这个文件。将它用Emeditor打开。(如果你没有这个文件,可以点击这里下载:Brsbox下载
|
Brsbox下载2
| 纳米盘下载)
上次舍得制作的精减版是第一行只有单词,第二行只有英英解释。这一次舍得想把例句和音标都保留下来。过程和步骤是次要的,关键是在这个过程中的思路和细节,舍得希望大家能够通过练习和思考掌握正则表达式中的使用规律。
(一)整理“第一行”
先来看第一行,它是这样的:
Q:
<b> able
<br>ABLE
[<font
face="Kingsoft Phonetic
Plain">5eibl</font>]</b><br><br>
因为音标要保留,所以第一行没什么要改的,只是有一个小地方要修订一下,它是一行小写,一行大写,舍得觉得没这个必要,就准备把它去掉。经过分析,舍得决定分两步实现:
1.查找:(^Q.*?<br>).*?/[
替换成:/1[
(PS:在替换前,大家可以先查找一下,看看自己定义的搜索条件是不是符合自己的要求。)
2.选中替换选项中的“区分大小写”,然后再继续
查找:(^Q.*?<br>)[A-Z].*?$
替换成:/1
1和2的次序不能颠倒了,这样,舍得就把标红的部分都删除了。
要点讲解:
·“^Q”:这个上一篇讲到了,表示行首是“Q”;
·“.*?”:这三个连用,表示在Q后面的任意字符——一直到“<br>”出现为止。后一个“.*?”是同样的含义,就是继续往后查,一直到“[”这个符号的出现;
·用“()”将“^Q.*?<br>”括起来,表示这一段我们将在替换时原封不动地放回;
·
“/[”:表示符号“[”,这样,我们就把要替换的内容都选中了,
·这里再复习一下“/1”的用法,“/1”就是表示将搜索条件中用圆括号括起来的地方在替换的时候予以保留。如果搜索条件有2对圆括号,那第二对圆括号中的内容我们可以表示为“/2”,依此类推。
·[A-Z],钩上“区分大小写”这个选下后,这就代表任意一个大写字母。
·“.*?$”:这里多了一个“$”,这个“$”代表的是行尾,为什么这里会有第2步的操作呢?大家可以观察一下,在第一步操作后,那些带词组的提问行因为没有用到音标,所以在第1步中并没有将大写去掉,所以在这里我们得把它去掉。
额外提示:
在搜索条件中输入“[A-Z]{2}”的话,就是表示查两个连续的大写字母,正则表达式用“{数字}”来表示要查的元素的数量,如果是“[A-Z]{1,3}”则表示查找1到3个连续的大写字母(注意把“区分大小写”勾选上)。
(二)整理“第二行”
我们分几段来讲,以able这个词为例,首先,我们要把“If”前的除“A: ”之外的字符都清除掉:
1.查找:(^A:
)<font.*?</font>.*?([A-Z])
替换成:/1/2
要点讲解:
·“A:”要保留,所以加上圆括号,而“^A ”则表示查找以行首字母A,注意冒号后还有个空格别弄丢了。
·<font.*?</font>:表示查找两头分别是“<font”和“</font>”的那一段,为什么这么写呢,因为“If”中的“I”是这一行里的第二个大写字母,而“<font.*?</font>”有个大写字母“C”,写了这一段就避免搞错。
·“.*?”和[A-Z]的含义上面已经说过,押下不表。
·/1/2:分别代表的是搜索条件中的两对圆括号中的内容,大家在做完后比对一下效果,就可以明白这里的用法。
2.查找:<font color=aqua>.*?$
替换成:
(替换项留空)
3.查找:<font
color=fuchsia>.*?</font>
替换成:
(替换项留空)
4.查找:<font
color=green>.*?</font>
替换成:
(替换项留空)
5.最后做一下整理,将多余的“<br>”(表示回车符)替换掉:
查找:<br><br>
替换成:<br>
2-5步中的要点前面均已讲到,这里不再做重复。做到这里,整个词库处理的工作就完成了。
六、重点复习
现在把前面讲到所用到的正则表达式的要点在这里复习一遍,然后加入一些舍得认为大家比较用得上的内容,因为纯粹地讲,会让人昏昏欲睡,效果比不学也差不了多少。
1.普通字符:指除了
“.”, “*”, “?”, “+”, “(“, “)”, “{“, “}”, “[", "]“, “^”, “$” 和 “/”
这些特殊字符之外的所有其他字符.
2.特殊字符:包括 “.”, “*”, “?”, “+”, “(“, “)”, “{“, “}”, “[", "]“, “^”,
“$” 和 “/” ,下面且听舍得逐一道来:
1).
匹配除换行符 /n 之外的任何单个字符;
2)*
零次或多次匹配前面的字符或子表达式。如,如前面讲到的“.*”连用就可以表示之后的任意字符;
3)?
零次或一次匹配前面的字符或子表达式。“?”跟在“*”后面等于告诉它,搜索到“?”之后带的字符就结束——讲得有点抽象,大家在前面的例子中将“?”拿掉搜索一下,一试对比就出来了,也就明白了这句话的意思;
4)$
匹配行尾。象前面例子里的“[A-Z].*?$”就表示匹配任意单个大写字母一直到行尾;
5)^
匹配你要用来查找的字符串的开头。如“^Q”表示行首为Q.“^”还有一个相当重要的用法,举个例子,“[^Q]”表示任意非Q的字符,而“^[^Q].*?$”则匹配行首字母不是Q的所有行。
6)[
]
中括号表达式的开始。如例子里的[A-Z]就表示任意单个大写字母。如[AB]则表示字母A若B。[0-9]则表示任意单个数字,还有一个最实用的表达式是“[[:unicode:]]”,这表示一个汉字或中文标点,马上去试一下吧;
7) ( )
分组捕获(子表达式)的开始和结束。可以捕获子表达式以供以后使用。说白一点就是在搜索中用括号括来的部分,就可以用“/”
加上数字来引用;
8)
{
}
标记限定符表达式的开始。还是引用前面讲过的,“[A-Z]{2}”表示任意两位连续的大写字母,而“[[:unicode:]]{3,5}”则表示3至5个连续的中文,这些都是舍得经常用到的;
9) +
修饰匹配次数为至少 1 次。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。如“[1]+”匹配1、11、111、1111……依此类推。
10) |
匹配左右两边表达式之间 “或”
关系,正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。听不明白?没关系,看例子:
0[0-9]{2}-[0-9]{8}|0[0-9]{3}-/d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(如0571-1234567)。
注意:要使用这些特殊字符本身的话,得在前面加上“/”,如“/[”表示“[”,“//”表示“/”等等。
再讲几个,大家可以自行在练习中掌握:
/w
匹配字母或数字或下划线或汉字
/s
匹配任意的空白符
/d
匹配数字,效果等同于[0-9]
/b
匹配单词的开始或结束
/n
回车符,这个也比较常用
举个例子:/b/w{5}/b
匹配刚好5个字符的单词。
估计大家看到这里,可能有人已经睡着了,舍得就此打住,如果有朋友要更加深入的了解正则表达式,舍得推荐一篇不错的文章,写得比我这里更加详尽,大家可以去看一下:正则表达式30分钟入门教程
七、宏的应用
在上篇的例子中,虽然只有短短三步,但如果你经常要用到这三步来转换材料的话,那舍得建议你使用EmEditor的宏功能,录好宏之后,按一个键就可以实现原本需要三步才能完成的工作。
1.从下载的collins分级词汇表中解压出一个collins4E.txt,emeditor打开它,然后打开“宏->开始/停止录制”菜单,开始录制工作(光标变成一个小摄像机加箭头的形状):
2.打开“搜索->替换”菜单,按照“五、应用实例”中的步骤逐一完成替换工作。
3.点击菜单“宏->开始/停止录制”,停止录制工作。
4.点击菜单“宏->另存为”,将当前录制的宏保存成一个文件(比如我这里起的文件名叫“柯林斯星级词汇提取):
5.以后要用的时候,只要点击菜单“宏->运行”或按F4键就可以了。
6.如果宏建得比较多,你要的宏不是当前在用的这个,那就点击菜单“宏->选择”,然后从保存宏的文件夹里选择你要的宏:
7.有时候你录制的宏是需要重复很多次的,那你可以选择菜单“宏->按临时选项运行”:
在弹出的“临时宏选项”的文本框中输入你想要运行的次数,按回车即可开始执行:
怎么样?是不是方便多了。宏的便利性在于你经常要做这类事务的时候,录下一个宏可以节省你大量的时间。
写到这里,词库制作篇就算完结了。基本上是按由浅入深的方式来写的,下篇的内容比较多一些。但关键不在于篇幅的长短,只要里面有一点点能够帮助到大家的,舍得就很开心了。
|
|
|