TextPro是綜合批處理中文文本文件和超文本文件的程序,適用于簡體中文和英文 Win9x/Me/NT/2K/XP/Vista。最初是為更準(zhǔn)確快速地處理佛經(jīng)而開發(fā)的。TextPro6增加了對Unicode的支持。
TextPro的獨(dú)到之處有簡繁體轉(zhuǎn)換、Big5編碼預(yù)處理、自定義替換、增強(qiáng)了中文支持的正則表達(dá)式、可以忽略異體字的文件比較、以及支持文件的批處理功能等。
正則式:
TextPro正則表達(dá)式的搜索引掣是在Henry Spencer的源代碼的基礎(chǔ)上,經(jīng)過大量的增改,尤其是增強(qiáng)了對中文的支持。
從4.5版起,TextPro在查找/替換中支持正則表達(dá)式。正則表達(dá)式是一種非常強(qiáng)大的搜索功能,通過與TextPro的其它功能相結(jié)合,可以方便地實(shí)現(xiàn)許多復(fù)雜的文本處理工作。
正則表達(dá)式原本是形式語言理論中的概念,與編譯器的構(gòu)造有密切的聯(lián)系。但是作為一個(gè)應(yīng)用軟件的用戶,我們沒有必要去細(xì)究正則表達(dá)式的嚴(yán)格定義和處理方法。本文將從實(shí)用的角度出發(fā),闡述在TextPro中引入正則表達(dá)式的目的、正則表達(dá)式的命令格式,以及如何利用正則表達(dá)式完成一些實(shí)際的文本處理工作。
我們在處理文本時(shí),經(jīng)常會(huì)遇到一些具有某種特定格式,或者說滿足某種規(guī)則的文本。比如,一個(gè)無符號的整數(shù)由一連串的數(shù)字構(gòu)成,而一個(gè)Email地址的格式則是“用戶名@主機(jī)名”,其中用戶名是一串字母或數(shù)字,主機(jī)名則是由若干個(gè)由“.”分隔的字母數(shù)字串。正則表達(dá)式就是用來指定這種規(guī)則的。如果某個(gè)字符串滿足正則表達(dá)式指定的規(guī)則,則稱該字符串為正則表達(dá)式的一個(gè)“匹配串”。
正則表達(dá)式的構(gòu)成:
為了方便理解,讓我們先來看看大家比較熟悉的數(shù)學(xué)表達(dá)式,“(x+3)*2+y”是一個(gè)典型的數(shù)學(xué)表達(dá)式。一個(gè)數(shù)學(xué)表達(dá)式由若干個(gè)“項(xiàng)”組成,“項(xiàng)”與“項(xiàng)”之間用加號或減號相連;這里“(x+3)*2”和“y”分別是兩個(gè)項(xiàng)。每個(gè)項(xiàng)又由若干個(gè)“因子”組成,因子之間用乘號或除號相連;這里第一個(gè)項(xiàng)有兩個(gè)因子“(x+3)”和“2”,而第二個(gè)項(xiàng)只有一個(gè)因子“y”。每個(gè)因子可以是一個(gè)簡單的數(shù),一個(gè)代數(shù)變量,也可以是放在括號里面的另一個(gè)表達(dá)式。對于最后一種情況,括號中的表達(dá)式稱為“子表達(dá)式”;這里“x+3”就是一個(gè)子表達(dá)式。
正則表達(dá)式的結(jié)構(gòu)與數(shù)學(xué)表達(dá)式很相似。與數(shù)學(xué)表達(dá)式的“項(xiàng)”相對應(yīng),正則表達(dá)式由若干個(gè)“分支”構(gòu)成,“分支”之間用符號“|”相連。從邏輯上講,分支之間是一種“或”的關(guān)系,一個(gè)字符串只要與正則表達(dá)式中的任何一個(gè)分支相匹配,這個(gè)字符串就與整個(gè)正則表達(dá)式相匹配。比如,“第三人稱代詞”可以用正則表達(dá)式表示為“他|她|它|他們|她們|它們”。
與數(shù)學(xué)表達(dá)式的“因子”相對應(yīng),構(gòu)成正則表達(dá)式“分支”的部件稱為“原子”。“原子”與“原子”之間沒有任何符號相連。從邏輯上講,原子之間是串接的關(guān)系,一個(gè)字符串必須與各個(gè)原子依次相匹配,才算與這個(gè)分支相匹配。比如在上面的例子中,分支“他們”由兩個(gè)原子“他”和“們”組成。
正則表達(dá)式的本質(zhì)是它的“原子”可以有多種不同的形式。前面的例子是最簡單的情形,即每個(gè)原子由一個(gè)普通字符組成。除此以外,“原子”還可以是特殊符號、通配符、字符集以及子表達(dá)式。
簡繁體轉(zhuǎn)換:
TextPro內(nèi)部采用Unicode編碼。通過讀入和保存不同編碼的文件可以實(shí)現(xiàn)不同編碼之間的轉(zhuǎn)換。TextPro可以實(shí)現(xiàn)繁體漢字與簡化漢字之間的互相轉(zhuǎn)換。
簡繁漢字轉(zhuǎn)換牽涉到許多問題,尤以多義字和古今用法中的異體字為難,無法兼顧。TextPro的漢字轉(zhuǎn)換以處理佛經(jīng)(古代文體)為主,未顧及現(xiàn)代漢字特點(diǎn)。
TextPro對漢字處理的原則是:一是遵循我國現(xiàn)有的漢字標(biāo)準(zhǔn);二是兼容全部BIG5碼漢字;三是采用多層次的轉(zhuǎn)換功能(如果文本行末有硬回車,宜使用TextPro的“刪除換行”功能進(jìn)行預(yù)處理)。后者是指除了一對一的漢字轉(zhuǎn)換外,在內(nèi)部轉(zhuǎn)換時(shí)還采取了以詞組選擇多義字的方法以盡量減少轉(zhuǎn)換錯(cuò)誤;不過,要想在轉(zhuǎn)換后得到完全正確的文章,仍須逐字校對。
在將文件保存到Big5編碼時(shí),可以用異體字和組字式替代Big5編碼不支持的漢字。在設(shè)置->選項(xiàng)中可以設(shè)置是否“轉(zhuǎn)成組字式”。
TextPro在漢字轉(zhuǎn)換之外還提供了一個(gè)補(bǔ)充功能:可以用自定義替換表進(jìn)行漢字的替換。用法在“正則表達(dá)式和自定義替換說明”的幫助文件(RegExp.chm)中有介紹。
TextPro開發(fā)過程中,糾正了NJStar把BIG5碼漢字轉(zhuǎn)成GB碼時(shí)出現(xiàn)的約200處錯(cuò)誤。原則是出現(xiàn)一對多的對應(yīng)時(shí),保留原字(GBK碼)。
簡體轉(zhuǎn)繁體中解決了部分一對多的難題,但對復(fù)雜情形和古文還不夠用,只能起到輔助作用。