标题: 【转帖】EmEditor使用正则表达式处理文本简单教程 [打印本页]

作者: 无极    时间: 2010-5-26 12:47
标题: 【转帖】EmEditor使用正则表达式处理文本简单教程
PS1:排版脚本不是万能的,因为TXT文本的不同,很多时候还需要手动使用正则替换。
PS2:排版脚本不能对多个TXT文件进行批量替换,推荐使用老马的TextForever软件中正则表达式批量替换功能(估计用的人的不多)
使用时注意下:正则表达式在JS和VBS脚本中的写法是不同的。

在其他论坛闲逛,觉得这篇文章不错。转帖过来,希望对正则新手有所帮助。其实做电子书,正则不用学好深,学到初级就足够了。
作者:shasini123

原帖地址:http://www.eshutan.com/thread-fid-119.html

什么是正则表达式

正则表达式(英文:Regular Expression)在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。


例一:段落间增加空行

一个最简单的例子,示例文本如图,我们的目标是在各个段落间加入一个空行
[attach]7118[/attach]

正则表达式中,使用\n表示一个换行符,一个换行符代表一段,要在段落间加入一个空行,只要把\n替换为\n\n即可。按Ctrl+H打开替换对话框,如图填入内容,注意在替换中一定要勾选“使用正则表达式”。替换结果如下

[attach]7119[/attach]


例二:查找章节

在处理TXT时,经常需要查找各个章节的开头位置。示例文本如下
[attach]7120[/attach]

一般来说,章节的开头一般是“第N章”或者“第N节”,N为中文或阿拉伯数字,如“第十四章“。查找时,按下Ctrl+F,正则表达式为
第[0-9一二三四五六七八九十零〇百]{1,5}[章]
效果如下
[attach]7121[/attach]

上面的表达式中,[]里的内容为所有可能字符,这里把所有中文和阿拉伯数字列为可能字符,{1,5}表示这些字符出现的次数为1~5次。比如“第一百二十一章”里面的“一百二十一”就是出现了5次字符。你完全可以根据需要改变次数。例如{1,3}就是出现1~3次。


例三:章节前加卷名

示例图片还是上一个例子的图片,但是目标是在所有章节前加上卷名,比如“第一章”变成“卷一 第一章”,实现如下效果
[attach]7122[/attach]

替换时查找的内容与上一个例子一样,但是注意在表达式外面要加一个括号。括号的作用是把里面的所有表达式合并为一个组。原因会在下面说明。
(第[0-9一二三四五六七八九十零〇百]{1,5}[章])
接着对这个组进行替换,替换的内容为
卷一 \1
上面的表达式中,\1指代第一个匹配到的组,即上面我们写的(第[0-9一二三四五六七八九十零〇百]{1,5}[章]),这样就成功替换了。


时间关系先写到这里,过完年后或许还会有后续教程。这里介绍的都是一些初级但实用的正则表达式用法,事实上正则表达式极端强大,却也难以掌握。使用正则表达式处理文本的一个要点就是平时多积累式子,然后自己修改式子化为己用。

最后说下,EmEditor有宏功能,可以录制下你的操作。因此一些常用的正则表达式,你可以录制下来后做一个按钮放在工具栏上
作者: 上帝de祭祀    时间: 2010-5-26 12:51
唉!!   好  太好了   又学了一招
作者: 狠心    时间: 2010-5-26 14:46
又有东西可以学了!!宾果!


作者: eigostein    时间: 2010-5-26 16:28
给补充一点,对文本排版的时候,经常需要消除错误的分段。
通常情况下,如果一个段落是以汉字结尾,同时下一个段落又是以汉字开头,那么这个段落应该就是分段错误。
在EmEditor中,匹配单个汉字是用的是“[\\x{4e00}-\\x{9fa5}]”。因此,使用EmEditor消除错误分段的方法就是:

在“查找”中填入“([\\x{4e00}-\\x{9fa5}])\\n([\\x{4e00}-\\x{9fa5}])”,在“替换为”中填入“\\1\\2”(注意都不包括引号),然后点击“替换全部”就可以了。
作者: flyds    时间: 2010-5-26 16:37
这个太实用了,简单易懂啊,原来用中华太阳系联盟的排版脚本一直因为东西太多看不懂,现在简单的终于看懂了
作者: whj70    时间: 2010-8-21 00:24
一般来说,章节的开头一般是“第N章”或者“第N节”,N为中文或阿拉伯数字,如“第十四章“。查找时,按下Ctrl+F,正则表达式为
第[0-9一二三四五六七八九十零〇百]{1,5}[章]


怎么替换成“第1234章”呢?(上千章节)
作者: dragon250    时间: 2010-8-24 13:58
及时雨呀,
作者: 梦雨    时间: 2011-1-23 18:20
都学点简单实用的没错

作者: 天空72号    时间: 2011-2-5 11:36
引用第9楼whj70于2010-08-21 00:24发表的 :
一般来说,章节的开头一般是“第N章”或者“第N节”,N为中文或阿拉伯数字,如“第十四章“。查找时,按下Ctrl+F,正则表达式为
第[0-9一二三四五六七八九十零〇百]{1,5}[章]


怎么替换成“第1234章”呢?(上千章节)

我认为这种情况正则表达式基本上无解,自己摸索的办法是利用EmEditor的宏操作来多步组合完成——上传附件里有范例演示!

下载附件后解压出来有5个文件,其中步骤是把“A.txt”的文档内容处理为“B.txt”,再把“B.txt”的文档内容处理为“C.txt”,最后把“C.txt”的文档内容处理为“D.txt”即完成了!其中要说明的是:把“B.txt”的文档内容处理为“C.txt”,用到的是“123.jsee”这个宏操作功能,其他的就是EmEditor的替换功能不必多说了。

[attach]32654[/attach]

还有提示一点的是,有些章节不连贯……或多或少章节的话,你就只能在“处理为B.txt文档”的步骤中,添加空行来补充或者删除多余行数,等“处理为C.txt文档”后,再手工处理回来。如果你想把“第(阿拉伯数字)章”替换为“第(中文数字)章”,就要手动修改“123.jsee”宏操作的源代码……这一步骤其实也可以用EmEditor的宏操作来高效率完成的,不怕做不出就怕想不到而已。




欢迎光临 (http://imap.zasq.net/) Powered by Discuz! X3.2