在实际开发中经常使用对WORD/EXCEL及其他数据格式的整理,其中之一便是使用WORD中的查找与替换功能整理数据。

    对于最一般的查找与替换功能相信各位都熟悉了,但是借助于WORD所支持的正则表达式,我们可以实现更复杂和实用的数据格式更改。

    我搜索了一些文章都提供了有关使用正则表达式的不同程度的例子,但是直接套用有许多是不行的。因此,我想在本文中好好整理一下,但是

时间原因,一下没法整理完,只好一部分一部分地来,将会把整理结果都汇总到这一篇文章中。

 

注意:本文最后给出了难题征解,而且这些难题将逐渐地添加到本文中。实用案例背景是一篇使用扫描仪刚刚扫描的中英文混合型文章的编辑。

    首先,来看一下WORD对于正则表达式的支持吧。



用于查找类型示例
任一字符?s?t 可找到“sat”和“set”。
任何字符串*s*d 可找到“sad”和“started”。
单词开头<<(inter) 可找到“interesting”和“intercept”,但找不到“splintered”。
单词结尾>(in)> 可找到“in”和“within”,但找不到“interesting”。
指定字符之一[ ]w[io]n 可找到“win”和“won”。
此范围内的任一字符[-][r-t]ight 可找到“right”和“sight”。范围必须是升序。
除了括号内范围中的字符之外的任一字符[!x-z]t[!a-m]ck 可找到“tock”和“tuck”,但找不到“tack”或“tick”。
前一个字符或表达式的 n 个匹配项{n}fe{2}d 可找到“feed”,但找不到“fed”。
前一个字符或表达式的至少 n 个匹配项{n,}fe{1,}d 可找到“fed”和“feed”。
前一个字符或表达式的 nm 个匹配项{n,m}10{1,3} 可找到“10”、“100”和“1000”。
前一个字符或表达式的一个或多个匹配项@lo@t 可找到“lot”和“loot”。



PUZZLE 1:把近似有规律的许多连续的半角空格字符替换为制表符?


例如如下分布的一些英语单词:

English    英语/英语的

Chinese   汉语/汉语的

...

注意,上面单词后面都跟了2个或者2个以上的空格字符。

于是我们可以构造下面的查找表达式(左边大括号的左边是一个半角空格字符):

 {2,}

注意,还要选择使用通配符(必须的)。

替换表达式是: ^t


PUZZLE 2:如何把类似于"明文与官方",甚至是"51CTO文章相关"的所有内容中的这一对半角双引号一下替换成成对的全角双号?

参考答案如下:

先上一幅图(哈哈,我现在在整理学校需要的一篇资料,正是使用扫描仪扫描的结果,非常混合,因此编辑与排版时非常麻烦才促使我想点快捷的方法j_0063.gif

wKiom1PcTPPywH7-AADD-fuVzCc387.jpg

请各位看清其中的使用荧光笔勾出的部分。现在我的目的是:想把所有成对的半角双引号替换成成对的全角双引号!!!---后面我还有大量的这些类似内容要处理呢...


替换及输入内容如下图所示:

wKioL1PcTuqy468LAAE7nsTp_VM593.jpg


请小心其中的全角和半角,啊!

替换后,得到下图所示结果:

wKiom1PcTlrBCK5WAADijusdtIE048.jpg

好了,问题解决了!

怎么,你没有看出来吗?----再次使用一下替换即可了(此时全角的成对的中文上引号与下引号是有区别的)j_0057.gif

当然了,如果把此问题扩大一下的话,还有至少两个问题(请自己想想吧)要解决......


另外,看到网络上有一个小文,说使用如下方法:

可以用查找与替换功能选中所有英文引号,然后将字体选择为“宋体”

很遗憾,他说的这个方法是利用了这个原理:默认情况下,WORD中中文使用的是宋体,而英文(包括半角的字母数字和标点)都使用的是Times New Roman字体。但是,很遗憾,我使用扫描仪扫描的文章中所有半角标点,在进入到WORD时其字体都是宋体,该死!!!而且,还该死的是,我把试验了一下,把这些宋体的英语引号改为Times New Roman字体,再使用上面小文中所说的,都不管用了???而且,我也注意到我使用的模板是WORD内置模板文件Normal.dot,再创建一个空白新文件,输入中文英文规律如以前一样。唉!看来这个小文中说的只能解决了一种情况吧。


再补充:--不补充不行j_0061.gifj_0061.gifj_0061.gifj_0061.gifj_0061.gif

再说一下类似的问题:

怎么把word里的英文双引号" "变成中文的双引号“” ?

我这是一篇很长的文档,里面是中文,但是却又大量的英文双引号 " " ,由于英文字符的双引号的前引号和后引号是一模一样的,所以用查找替换就会把前引号和后引号全部替换成相同的中文引号字符了,这个的方法是行不通的。

j_0061.gif快速解决如下:

1.关闭自动更正功能(直引号为弯引号)。
具体地说,对应菜单“工具”-“自动更正选项”,
在“键入时自动套用格式”这个选项卡中有一项默认情况是“直引号替换为弯引号”前面有一个钩子,去掉之!!!

2.完成替换:将"(*)"替换为“\1”

使用word里的高级查找替换功能! 一下子搞定!!!




Puzzle 3:怎么在word里去掉所有的汉字?

参考答案如下:

    按住“ctrl+H”组合键,在弹出的“查找和替换”窗口的“高级→查找内容”处填上“[-]”,(提示:“龥”字是繁体,拼音为yù,谷歌输入法可切换简繁输入)注意勾选“使用通配符”,这样就能查找所有中文字体,最后替换为空,就可以删除全部的中文了。反过来,如果要保留单词中文意思而删除英文,只要要查找内容处输入“^$”就可以了,操作非常方便。



Puzzle 4:如何查找一对汉字小括号及其中内容?

参考答案如下(尚未彻底解决):

使用[(\“]*[”\)]或者[(\(]*[)\)]


补充:查找到以后,例如要删除,这个很好办,要对其中内容进行基本排版,这个也好办。但是,要修改成其他内容呢?我是说包含这一对汉字小括号?这个问题解了,上面的PUZZLE 2也就解了。

当然,我还知道一个办法是使用VBA宠编程,然后运行宏。但是,这个对于普通办公人员要求可能高了。当然,制作出来让他们用完全可以的。我现在还没有时间研究这个,有兴趣的朋友可以先试试。