当前位置: 移动技术网 > 科技>软件教程>编程开发 > EmEditor 正则表达式使用基础与实战

EmEditor 正则表达式使用基础与实战

2013年11月06日  | 移动技术网科技  | 我要评论
EmEditor 正则表达式使用基础与实战

一、基础篇
1.
^  匹配行首,比如说查找^s, 就是查位于行首的 s 
2.
.*?$  这个用处比较大,但一般不单独使用,比如与上面的结合 
比如 ^s.*?$,就是查以 s 为行首的行,其中 .* 是匹配任意字符,$ 代表行尾,?$ 是告诉程序你要定位到行尾。 
3.
\n  这个很简单,就是换行符,用得也非常多, 
比如 “\n”,替换成“\n”,就是把2个换行符替换成1个。 
练习:
bas,bat =to,go(走) 
chlor =green or chlorine(绿,氯) 
chol =gallbladder(胆) 
chondrio =cartilage(软骨) 
erg =energe(能量) 
err =to wander(流浪;漂泊),to err(偏离正道,犯错,犯罪) 
ess,est =to be(存在) 
est,ess =to be(存在) 
a. 查找行首的a、e、c等字符;
^a|^e|^c
b. 查找以c开头的行,不包括换行符;
^c.*?$
c. 查找以e开头的行,包括换行符;
^e.*\n
d. 查找两个相连的换行符,将它替换成一个;
\n
\n
4.
\s 是表示一个半角空格(半角和全角看不懂的请先google一下), 
\t 指的是一个tab空格,不清楚的话在emeditor里敲一次tab键,出来的就是它了。 
查 \s 的时候是包括tab空格的,但查 \t 的时候却不能包括半角空格,其实这两个都非常有用。 
\s 与 \n 连用,那就是非常实用的查行尾空格的表示法了 
5.
{1,n} 大括号内的数字是表示数量的范围,它的前面必须有个东西,比如说“\s{1,3}”就表示1到3个空格通吃, 
如果用“\s{3}”呢,就意味着3个空格 
6.
[a-z]  表示26个字母中的任一个,如果在替换窗口内勾选“区分大小写”则表示26个小写字母,否则大小写通吃。 
练习:
acousto =sound(声音) 
acro = high(高) 
act =do(行动) 
  acuti = acuate (尖的,尖锐的)  
acousto = sound(声音)  
  aer,aero,ar,aro=air(空气)   
after =(在……之后)   
1)删除下列文本中的行首空格(请结合上一练习);
^\s*
2)删除行尾空格;
\s*$
3)将文本中的tab空格替换成半角空格;
4)查找任意相连的四个字母;
[a-z]{4}
5)查找位于行首的长度为3-5个字母的单词(注意必须是完整单词,这题稍微要动动脑筋,找一下规律)。
^[a-z]{3,5}
小结:使用正则表达式来处理文档,最大的关键在于仔细去分析文档中的规律,只要有规律可以利用,我们就能进行批量处理,工作效率就是这么提高的。一定要多想,更重要的是多试,有时候想半小时还不如实际动手操作5分钟。
7.
[] 就是上面的[a-z]往下讲,用中括号括起来表示括号某一个字符,你也可以这样表示:[abc],意思是a、b、c三个字母中任一个都行。 
但[] 与^结合有一个非常实用的用法,比如^[^c],这表示位于行首的除 c 之外的字母。 
8.
() 单独使用的话没有什么意义,用了它就表示引用括号里的内容,然后用\1\2\3…… 来一一调用 
\1 是第一个小括号里的内容,\2 是第二个小括号里的内容,依此类推。 
9.
[[:unicode:]]  用它来将中文字符和英文字符区分开来。 
练习:
document.selection.replace("瑞秋","rachel",eefindnext | eereplaceall | eefindreplaceregexp); 
document.selection.replace("钱德勒","chandler",eefindnext|eereplaceall|eefindreplaceregexp); 
document.selection.replace("钱德","chandler",eefindnext | eereplaceall|eefindreplaceregexp); 
document.selection.replace("乔伊","joey",eefindnext | eereplaceall | eefindreplaceregexp); 
document.selection.replace("菲比","phoebe",eefindnext | eereplaceall | eefindreplaceregexp); 
然后分别执行下述操作:
1.将  ("瑞秋","rachel", 改为 ("rachel","瑞秋",
其它各行参照此格式进行修改;
查找:(".*?"),(".*?")
替换:\2,\1
2.删除所有中文字符;
[[:unicode:]]
10.特殊字符:


( ) 
[ ] 
{ } 




|  
这些字符都是在正则表达式中被“征用”了,称之为特殊字符,引用的时候,必须前面加 "\" 进行区分,比如你要用到 "$" 字符的时候,必须使用 "\$",这样程序才不会以为你是在匹配行尾。
练习:
[00:53.90][monica]:there's nothing to tell! 
[00:55.60][monica]:he's just some guy i work with! 
[00:57.90][joey]:c'mon, you're going out with the guy! 
[00:59.10][joey]:there's gotta be something wrong with him! 
[01:02.70][chandler]:all right joey, be nice. 
[01:04.80][chandler]:so does he have a hump? a hump and a hairpiece? 
然后分别执行下述操作:
1.删除带"[]"的内容;
\[.*\]
2.做完上一步后,删除位于行首的 ":"。

二、实战篇
练习1:
首先,把以下五个小零件翻译出来,这一定很简单,它们是: 
第一个零件:这项计划提供机会,翻成英语是this plan providedopportunities。 
第二个零件:为研究者,翻成英语是forresearchers。 
第三个零件:从印度和外国来的,翻成英语是from india andabroad。 
第四个零件:研究老虎,翻成英语是to studytigers。 
第五个零件:在保护区里,翻成英语是in thereserves。 
然后将这段文本替换成如下格式:
首先,把以下五个小零件翻译出来,这一定很简单,它们是: 
第一个零件:这项计划提供机会,翻成英语是this plan providedopportunities。 
第二个零件:为研究者,翻成英语是forresearchers。 
第三个零件:从印度和外国来的,翻成英语是from india andabroad。 
第四个零件:研究老虎,翻成英语是to studytigers。 
第五个零件:在保护区里,翻成英语是in thereserves。 
提示:删除多余的换行符。
\n
练习2:
and bigger boobs!   大笨蛋! 
"yeah, see.. you took mine. chandler, what about you?"  你知道我的了。钱德,你呢? 
"uh, if i were omnipotent for a day, i'd.. make myself omnipotent forever." 如果有一天我变得全能,我要让自己变得永远全能。 
"see, there's always one guy."  看吧,这儿总是有一个家伙。 
"if i had a wish, i'd wish for three more wishes."  如果我有愿望的话,我希望我还能多有三个愿望。 
然后将这段文本替换成如下格式:
q: and bigger boobs! 
a: 大笨蛋! 
q: "yeah, see.. you took mine. chandler, what about you?" 
a: 你知道我的了。钱德,你呢? 
q: "uh, if i were omnipotent for a day, i'd.. make myself omnipotent forever." 
a: 如果有一天我变得全能,我要让自己变得永远全能。 
q: "see, there's always one guy." 
a: 看吧,这儿总是有一个家伙。 
q: "if i had a wish, i'd wish for three more wishes." 
a: 如果我有愿望的话,我希望我还能多有三个愿望。 
要求:使用一个查找和替换语句完成。
友情提示:这段文本是将excel文件另存为"制表符分隔”的文本文件得到的。
参考答案:
查找:(^.*?)\t(.*?$)
替换:q: \1\na: \2
练习3:
4 and bigger boobs! 大笨蛋! 
5 "yeah, see.. you took mine. chandler, what about you?"    你知道我的了。钱德,你呢? 
6 "uh, if i were omnipotent for a day, i'd.. make myself omnipotent forever."   如果有一天我变得全能,我要让自己变得永远全能。 
7 "see, there's always one guy."""  看吧,这儿总是有一个家伙。 
8 "if i had a wish, i'd wish for three more wishes."""  如果我有愿望的话,我希望我还能多有三个愿望。 
然后将这段文本替换成如下格式:
q: and bigger boobs!  
a: 大笨蛋! 
q: yeah, see.. you took mine. chandler, what about you?  
a: 你知道我的了。钱德,你呢? 
q: uh, if i were omnipotent for a day, i'd.. make myself omnipotent forever.  
a: 如果有一天我变得全能,我要让自己变得永远全能。 
q: see, there's always one guy.  
a: 看吧,这儿总是有一个家伙。 
q: if i had a wish, i'd wish for three more wishes.  
a: 如果我有愿望的话,我希望我还能多有三个愿望。 
要求:使用一个查找和替换语句完成。
友情提示:""是固定的,变的只是原先位于行首的数字。
参考答案:
查找:(^\d.*?)\t(.*?\t)(.*?$)
替换:q: \2\na: \3
练习4:
valedictory "a.告别的 
n.告别演讲" 
close-hauled    a.张满帆的,迎风航行的 
mean    "a.吝啬的,卑鄙的,简陋的,不舒服的,平庸的,低劣的,中间的,中等的,平均的,普通的 
n.中间,中部,中庸" 
bumper-to-bumper    a.前后紧接且行进缓慢的车队的 
between a rock and a hard place ph.左右为难,进退两难 
have one's head screwed on the right way    ph.头脑清醒 
mimic   "v.(通过学养)戏弄,模仿,与。。。极相似 
n.善于模仿的人,能模仿人的动物,滑稽剧演员 
a.模仿的,好模仿的,模拟的,假装的" 
1.将它转换成下面这样的格式:
valedictory "a.告别的n.告别演讲" 
close-hauled a.张满帆的,迎风航行的 
mean "a.吝啬的,卑鄙的,简陋的,不舒服的,平庸的,低劣的,中间的,中等的,平均的,普通的n.中间,中部,中庸" 
bumper-to-bumper a.前后紧接且行进缓慢的车队的 
between a rock and a hard place ph.左右为难,进退两难 
have one's head screwed on the right way ph.头脑清醒 
mimic "v.(通过学养)戏弄,模仿,与。。。极相似n.善于模仿的人,能模仿人的动物,滑稽剧演员a.模仿的,好模仿的,模拟的,假装的" 
2.处理成q&a格式的词库:
q: valedictory 
a: "a.告别的n.告别演讲" 
q: close-hauled 
a: a.张满帆的,迎风航行的 
q: mean 
a: "a.吝啬的,卑鄙的,简陋的,不舒服的,平庸的,低劣的,中间的,中等的,平均的,普通的n.中间,中部,中庸" 
q: bumper-to-bumper 
a: a.前后紧接且行进缓慢的车队的 
q: between a rock and a hard place 
a: ph.左右为难,进退两难 
q: have one's head screwed on the right way 
a: ph.头脑清醒 
q: mimic 
a: "v.(通过学养)戏弄,模仿,与。。。极相似n.善于模仿的人,能模仿人的动物,滑稽剧演员a.模仿的,好模仿的,模拟的,假装的" 
提示:题1需要多动动脑筋,要注意观察材料的特点,利用好tab符号,需要搭一个跳板。题2则与练习1是一样的解决方法。
参考答案:
1.分三步走
a、查找:^(.*?\t.*?$)
替换:#\1
因为不能直接找出不带\t的行,那就先给带\t的行做个标记;
b、查找:\n([^#])
替换:\1
注意\n([^#])与(^[^#])的细微区别
c、查找:^#
替换:
删除掉行首多余的#号
2.参看练习2的解答,大部分用excel另存的带制表符分隔的文本都可以照这样的方式处理。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网