昨晚发了一篇文章,介绍了Word中如何使用通配符选中所有中英文间的空格。通过这篇文章,我准备就着这个话题解释一下为什么用“([一-龥])( )([a-zA-Z])”这样一个通配符组合可以代替所有中英文间的空格,而为什么替换成“\1^t\3”这个通配符组合后就可以将那些空格都替换成制表符。
技巧十四:通配符
通配符的英文是“wild card”,为什么这个词要翻译成“通配符”呢?
简单说来,“wild card”是牌类游戏中的一种特殊的牌,在出牌的时候可以用这种牌来代替其他的牌。
到了文字处理工作中,有的时候假如我们需要去找所有以字母“a”开头,字母“e”结尾的单词时,我们就需要用某个符号来代替a和e之前的字母。
以上两种情况是类似的,都是用一个固定的东西去代替其他的东西。如此说来,将“wild card”翻译成“通配符”也是很传神的,一个通配符可以去替代很多个符号。
在第二个例子中,可以用“a*e”来代替所有以字母“a”开头,字母“e”结尾的单词,其中星号的意思就是代表任意长度的字符串,这个星号可以用来代替“apple”中的“ppl”,也可以用来代替“automate”中的“uomat”。
接下来继续说技巧十三中用\1^t\3”来替换“([一-龥])( )([a-zA-Z])”即可把所有中英文之间的空格替换成制表符的例子。
知识点一:[]
英文的方括号在通配符中表示的是一个范围,比如如果我在“查找替换窗口”中:
输入“[一-龥]”后点击查找,Word就会从整篇文章中的第一个字符开始寻找任意一个中文字符;
输入“[a-z]”后点击查找,Word就会从整篇文章中的第一个字符开始寻找任意一个小写英文字符;
输入“[A-Z]”后点击查找,Word就会从整篇文章中的第一个字符开始寻找任意一个大写英文字符;
输入“[a-zA-Z]”后点击查找,Word就会从整篇文章中的第一个字符开始寻找任意一个英文字符;
等等。
其实这个也比较好理解,在高中数学中我们就学到方括号往往表示一个闭区间,比如[a-z]就是表示从a到z之间包括a和z在内的所有字母。
知识点二:()
通过知识点一的介绍,你差不多已经知道“([一-龥])( )([a-zA-Z])”的大致意思了。
你的理解也许是这样:
“这个通配符由三部分组成“[一-龥]”表示任意一个汉字,“[a-zA-Z]”表示任意一个字母,中间还有一个由圆括号括起来的“空格”。也就是说这个我们要找的内容符合这样的规则:前面是一个中文字符、中间是空格、后面是英文字符。”
那既然这样的话直接写成“[一-龥][a-zA-Z]”就行了,为什么还要加三个圆括号呢?
计算机在查找内容的时候是按部就班来得,当你告诉它去检索“[一-龥]”时,“哦,叫我去检索整篇文档的第一个任意中文字符”,于是它就去检索第一个任意中文字符,一旦检索到了,它就停了。我们在检索时如果输入“[一-龥] [a-zA-Z]”,它得到的指令就是去检索所有“一个任意中文字符+一个空格+一个任意英文字符”的文字。
事实上,如果这样检索的话,的的确确能够检索到符合这种规则的文字,但是真这样做的话,就会出现一个很严重的问题:我们检索的目的是什么,我们的目的不是要去检索中英文之间的空格,这样检索的话岂不是会把两边的中文和英文也检索上?
因此圆括号就在这里派上了用场。
你可以把圆括号理解成一个“盒子”,一个让计算机可以往里面存东西的盒子。然后我们再来看一下最初的那个符号:“([一-龥])( )([a-zA-Z])”。 当我们开始检索时,计算机得到的指令是这样的:“哦,给了我三个盒子,检索到'一个任意中文字符+一个空格+一个任意英文字符'这样的内容后,就把中文字符放大第一个盒子里,把空格放到第二个盒子里,把英文字符放到第三个盒子”。 现在,我们发现,空格就通过这样的方式“放到了第二个盒子里”。
知识点三:\1 \2 \3
当计算机完成了这一步操作,将中文字符、空格和英文字符都分别放到了三个盒子后,我们就需要给他下一个命令了:“将放在第二个盒子里的空格换成制表符,然后在Word中显示出来”。
计算机接到命令后,“哦,第一个盒子里的内容不变,第二个盒子里的内容换成制表符,第三个盒子里的内容不变,然后把这三个盒子放回到Word里面去”。
怎么第一个和第三个盒子里的内容不变呢?在这个通配符中,我们就用\1代表第一个括号里的内容,用\3代表第三个括号的里的内容。这样替换之后,就可以保证中文字符还是原来的中文字符,英文还是原来得英文字符。假如我们又用“[一-龥]”,那计算机又得搞个任意中文字符出来。
知识点四:^t
这个知识点就比较简单了,顺便延伸一下。
“制表符”的英文是“Tab”,键盘上“Q”键左侧的“Tab”键就是用来输入制表符的。这个词之所以翻译成“制表符”是因为它来自于“Table”这个词,“Table”是“表格”的意思。“制表符”就是用来制作表格的符号。
总结:
简单的说,用“\1^t\3”来替换“([一-龥])( )([a-zA-Z])”时,可以将“一个中文字符+空格+一个英文字符”这样的结构中的空格替换成制表符。