TextPro是综合批处理中文文本文件和超文本文件的程序,适用于简体中文和英文 Win9x/Me/NT/2K/XP/Vista。最初是为更准确快速地处理佛经而开发的。TextPro6增加了对Unicode的支持。
TextPro的独到之处有简繁体转换、Big5编码预处理、自定义替换、增强了中文支持的正则表达式、可以忽略异体字的文件比较、以及支持文件的批处理功能等。
正则式:
TextPro正则表达式的搜索引掣是在Henry Spencer的源代码的基础上,经过大量的增改,尤其是增强了对中文的支持。
从4.5版起,TextPro在查找/替换中支持正则表达式。正则表达式是一种非常强大的搜索功能,通过与TextPro的其它功能相结合,可以方便地实现许多复杂的文本处理工作。
正则表达式原本是形式语言理论中的概念,与编译器的构造有密切的联系。但是作为一个应用软件的用户,我们没有必要去细究正则表达式的严格定义和处理方法。本文将从实用的角度出发,阐述在TextPro中引入正则表达式的目的、正则表达式的命令格式,以及如何利用正则表达式完成一些实际的文本处理工作。
我们在处理文本时,经常会遇到一些具有某种特定格式,或者说满足某种规则的文本。比如,一个无符号的整数由一连串的数字构成,而一个Email地址的格式则是“用户名@主机名”,其中用户名是一串字母或数字,主机名则是由若干个由“.”分隔的字母数字串。正则表达式就是用来指定这种规则的。如果某个字符串满足正则表达式指定的规则,则称该字符串为正则表达式的一个“匹配串”。
正则表达式的构成:
为了方便理解,让我们先来看看大家比较熟悉的数学表达式,“(x+3)*2+y”是一个典型的数学表达式。一个数学表达式由若干个“项”组成,“项”与“项”之间用加号或减号相连;这里“(x+3)*2”和“y”分别是两个项。每个项又由若干个“因子”组成,因子之间用乘号或除号相连;这里第一个项有两个因子“(x+3)”和“2”,而第二个项只有一个因子“y”。每个因子可以是一个简单的数,一个代数变量,也可以是放在括号里面的另一个表达式。对于最后一种情况,括号中的表达式称为“子表达式”;这里“x+3”就是一个子表达式。
正则表达式的结构与数学表达式很相似。与数学表达式的“项”相对应,正则表达式由若干个“分支”构成,“分支”之间用符号“|”相连。从逻辑上讲,分支之间是一种“或”的关系,一个字符串只要与正则表达式中的任何一个分支相匹配,这个字符串就与整个正则表达式相匹配。比如,“第三人称代词”可以用正则表达式表示为“他|她|它|他们|她们|它们”。
与数学表达式的“因子”相对应,构成正则表达式“分支”的部件称为“原子”。“原子”与“原子”之间没有任何符号相连。从逻辑上讲,原子之间是串接的关系,一个字符串必须与各个原子依次相匹配,才算与这个分支相匹配。比如在上面的例子中,分支“他们”由两个原子“他”和“们”组成。
正则表达式的本质是它的“原子”可以有多种不同的形式。前面的例子是最简单的情形,即每个原子由一个普通字符组成。除此以外,“原子”还可以是特殊符号、通配符、字符集以及子表达式。
简繁体转换:
TextPro内部采用Unicode编码。通过读入和保存不同编码的文件可以实现不同编码之间的转换。TextPro可以实现繁体汉字与简化汉字之间的互相转换。
简繁汉字转换牵涉到许多问题,尤以多义字和古今用法中的异体字为难,无法兼顾。TextPro的汉字转换以处理佛经(古代文体)为主,未顾及现代汉字特点。
TextPro对汉字处理的原则是:一是遵循我国现有的汉字标准;二是兼容全部BIG5码汉字;三是采用多层次的转换功能(如果文本行末有硬回车,宜使用TextPro的“删除换行”功能进行预处理)。后者是指除了一对一的汉字转换外,在内部转换时还采取了以词组选择多义字的方法以尽量减少转换错误;不过,要想在转换后得到完全正确的文章,仍须逐字校对。
在将文件保存到Big5编码时,可以用异体字和组字式替代Big5编码不支持的汉字。在设置->选项中可以设置是否“转成组字式”。
TextPro在汉字转换之外还提供了一个补充功能:可以用自定义替换表进行汉字的替换。用法在“正则表达式和自定义替换说明”的帮助文件(RegExp.chm)中有介绍。
TextPro开发过程中,纠正了NJStar把BIG5码汉字转成GB码时出现的约200处错误。原则是出现一对多的对应时,保留原字(GBK码)。
简体转繁体中解决了部分一对多的难题,但对复杂情形和古文还不够用,只能起到辅助作用。