论文部分内容阅读
一位做图书管理员的同学请教我一个问题:她在生成5万本收藏图书目录的时候,产生的每一条记录都带了图书所在的文件路径,路径中间出现好几次反斜杠(如图1),而她只需要图书所在的盘符和图书名称,不需要中间的具体路径,她希望得到的列表格式是如图2所示的样子(如图2)。5万多条图书目录,如何才能一次性去掉这些路径字符串呢?同学说她也曾经尝试用功能强大的EmEditor文字处理软件来处理,试图将两个半角反斜杠中间所夹的不定长字符串路径成批替换为某个字符串(比如空),但试验了许多方法都不能成功。他问我,在EmEditor中到底该该如何构建这个正则表达式。
同学的这一解决思路是正确的。但是,要在EmEditor中实现如上替换,光知道正则表达式符号的一般单一用法不行,必须要能灵活运用其用法的组合,方能达到完美替换的效果。本案例的处理思路虽然很简单,有一点替换经验的人都知道,只要把上图中所有反斜杠里包括的内容都变成空即可。但难点就在于,反斜杠的数量不定,反斜杠中的字串长度不定,如何构造“查找”所需的正则表达式。下面,我先告诉您完成这一任务的最终表达式,然后再一步一步解释这个表达式的来由,详细说明这个表达式是如何实现这个案例中的查找和替换的。
具体实现方法:
用EmEditor打开要处理的含有5万条记录的文本文件,在EmEditor编辑窗口中通过“搜索→替换”命令(如图3)(或者Ctrl+H热键)激活“替换”窗口;在该窗口中的“查找”一栏输入表达式\\([^ ]*)\\,“替换为”一栏中什么也不用输入(留空),先点击“查找下一个”按钮看看查找结果是不是符合要求,如果有问题,检查一下表达式构造是不是严格相符,检查一下“使用正则表达式”复选框是不是已经被选中(必须选中才能发挥作用),如果查找结果符合要求,点击“全部替换”按钮进行全文替换即可(如图4)。
表达式详解:
以上表达式中的\\表示查找\符号。由于\符号是EmEditor系统内定的一个转义字符,有其特定的含义,因此不能直接输入单个的符号来查找该符号本身,只有两个相同的符号重复使用,才能查找到该符号本身。
表达式中的[^]表示匹配列表之外的任何单个字符。[^ ]的方括号中间含有一个半角空格,因此[^ ]表达式表示匹配半角空格之外的任何符号。
表达式中的*表示其左边的字符将被匹配任意次(0次或者多次)。例如,be*匹配b、be或者bee等等。
综合如上三种符号的解释,三种符号组合使用,表达式\\([^ ]*)\\的含义是,首先找到第一个\符号,接着查找任意多个非空格的连续字符串,直到找到最后一个\符号为止。
小提示
关于匹配列表,还有如下两种常见情况,[^ab]匹配a和b以外的字符,而[^0-9]匹配任意非数字字符。大家注意仿此格式灵活应用。
同学的这一解决思路是正确的。但是,要在EmEditor中实现如上替换,光知道正则表达式符号的一般单一用法不行,必须要能灵活运用其用法的组合,方能达到完美替换的效果。本案例的处理思路虽然很简单,有一点替换经验的人都知道,只要把上图中所有反斜杠里包括的内容都变成空即可。但难点就在于,反斜杠的数量不定,反斜杠中的字串长度不定,如何构造“查找”所需的正则表达式。下面,我先告诉您完成这一任务的最终表达式,然后再一步一步解释这个表达式的来由,详细说明这个表达式是如何实现这个案例中的查找和替换的。
具体实现方法:
用EmEditor打开要处理的含有5万条记录的文本文件,在EmEditor编辑窗口中通过“搜索→替换”命令(如图3)(或者Ctrl+H热键)激活“替换”窗口;在该窗口中的“查找”一栏输入表达式\\([^ ]*)\\,“替换为”一栏中什么也不用输入(留空),先点击“查找下一个”按钮看看查找结果是不是符合要求,如果有问题,检查一下表达式构造是不是严格相符,检查一下“使用正则表达式”复选框是不是已经被选中(必须选中才能发挥作用),如果查找结果符合要求,点击“全部替换”按钮进行全文替换即可(如图4)。
表达式详解:
以上表达式中的\\表示查找\符号。由于\符号是EmEditor系统内定的一个转义字符,有其特定的含义,因此不能直接输入单个的符号来查找该符号本身,只有两个相同的符号重复使用,才能查找到该符号本身。
表达式中的[^]表示匹配列表之外的任何单个字符。[^ ]的方括号中间含有一个半角空格,因此[^ ]表达式表示匹配半角空格之外的任何符号。
表达式中的*表示其左边的字符将被匹配任意次(0次或者多次)。例如,be*匹配b、be或者bee等等。
综合如上三种符号的解释,三种符号组合使用,表达式\\([^ ]*)\\的含义是,首先找到第一个\符号,接着查找任意多个非空格的连续字符串,直到找到最后一个\符号为止。
小提示
关于匹配列表,还有如下两种常见情况,[^ab]匹配a和b以外的字符,而[^0-9]匹配任意非数字字符。大家注意仿此格式灵活应用。