跳轉到主要內容
正規表示式用於正規表示式字典,用來定義某種語言中允許哪些單字,以及不允許哪些單字。

正規表示式規則

ABBYY FineReader Engine 的正規表示式字元表如下表所示:
項目名稱慣用正規表示式符號使用範例與說明
任意字元.c.t — 表示如 “cat”、“cot” 這類單字
字元範圍中的字元[][b-d]ell — 表示如 “bell”、“cell”、“dell” 這類單字 [ty]ell — 表示單字 “tell” 和 “yell”
不在字元範圍中的字元[^][^y]ell — 表示如 “dell”、“cell”、“tell” 這類單字,但不允許 “yell” [^n-s]ell — 表示如 “bell”、“cell” 這類單字,但不允許 “nell”、“oell”、“pell”、“qell”、“rell” 和 “sell”
\c(a\u)t — 表示單字 “cat” 和 “cut”
連續出現 0 次或多次*10* — 表示數字 1、10、100、1000 等
連續出現 1 次或多次+10+ — 允許數字 10、100、1000 等,但不允許 1。
字母或數字[0-9a-zA-Z][0-9a-zA-Z] — 允許單一字元;[0-9a-zA-Z]+ — 允許任何單字
大寫拉丁字母[A-Z]<br />
小寫拉丁字母[a-z]<br />
大寫西里爾字母[А-Я]<br />
小寫西里爾字母[а-я]<br />
數字[0-9]<br />
空白字元[\s]<br />
系統字元@<br />
來自字典的單字@(Dictionary)Dictionary 參數會設定使用者字典的路徑,並從該字典中擷取單字。Linux 路徑範例:@(/opt/MyDictionary.amd) macOS 路徑範例:“/Users/user/Documents/MyDictionary.amd 在 Windows 中,路徑中的反斜線必須成對輸入。例如:@(D:\MyFolder\MyDictionary.amd)。<Note> 某些程式語言 (例如 C++) 要求您在 string 常值中跳脫反斜線。在這種情況下,您需要使用兩個已跳脫的反斜線,因此最後會得到四個反斜線。上述範例在 C++ 中如下所示:</Note> L"@(D:\\\\\\\\MyFolder\\\\\\\\MyDictionary.amd)"
  • 正規表示式中有些字元屬於「輔助」字元,也就是用於系統用途。如上表所示,這類字元包括方括號、句點等。如果您想將輔助字元當作一般字元輸入,請在前面加上反斜線 ()。例如:[t-v]x+ 表示如 “tx”、“txx”、“txxx” 等單字,以及 “ux”、“uxx” 等;而 [t-v]x+ 則表示如 “[t-v]x”、“[t-v]xx”、“[t-v]xxx” 等單字。
  • 如果您需要將某些正規表示式元素分組,請使用括號。例如,(a|b)+|c 表示 “c” 以及如 “abbbaaabbb”、“ababab” 等各種組合 (即任何非零長度的單字,其中可包含任意數量、任意順序的 a 和 b) ;而 a|b+|c 則表示 “a”、“c”,以及 “b”、“bb”、“bbb” 等。

正規表示式範例

日期的正規表示式 表示日的數字可以是一位數 (例如 1、2 等) 或兩位數 (例如 02、12) ,但不能為零 (00 或 0) 。因此,日的正規表示式如下所示: ((|0)[1-9])|([12][0-9])|(30)|(31). 月的正規表示式如下所示: ((|0)[1-9])|(10)|(11)|(12). 年度的正規表示式如下所示: (((19)|(20))[0-9][0-9])|([0-9][0-9]). 接下來,只要把這些全部組合起來,並以句點分隔數字 (例如 1.03.1999) 即可。句點是輔助符號,因此必須在前面加上反斜線 ()。完整日期的正規表示式如下所示: (((|0)[1-9])|([12][0-9])|(30)|(31)).(((|0)[1-9])|(10)|(11)|(12)).((((19)|(20))[0-9][0-9])|([0-9][0-9])) 電子郵件地址的正規表示式 您可以輕鬆建立一個用來表示電子郵件地址的模式。電子郵件地址的正規表示式可能如下所示: [a-zA-Z0-9_-.]+@[a-zA-Z0-9.-]+.[a-zA-Z]+

用於資料擷取

如果您在欄位層級辨識中使用正規表示式,通常只需要辨識與正規表示式完全相符的單字。在這種情況下,我們建議另外建立一種用於辨識欄位的語言,並為其設定下列屬性:
  1. 僅允許字典中的單字作為辨識結果:將 IBaseLanguage::AllowWordsFromDictionaryOnly 屬性設為 TRUE。這對於精確比對是必要的。
  2. 辨識語言的字母集只能包含正規表示式中使用的字元:指定 IBaseLanguage::LetterSet 屬性。這是必要的,因為即使某些字元不符合正規表示式,仍可能辨識出語言字母表中的字元。
  3. IBaseLanguage::IsNaturalLanguage 屬性設為 FALSE。

Windows 範例

// 全域 ABBYY FineReader Engine 物件
FREngine.IEngine engine;
// LanguageDatabase 物件
FREngine.ILanguageDatabase languageDatabase = engine.CreateLanguageDatabase();
// 建立 TextLanguage 物件
FREngine.ITextLanguage textLang = languageDatabase.CreateTextLanguage();
// 建立 BaseLanguage 物件並指定設定
FREngine.IBaseLanguage baseLang = textLang.BaseLanguages.AddNew();
baseLang.set_LetterSet(FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, "$0123456789,.");
baseLang.IsNaturalLanguage = false;
baseLang.AllowWordsFromDictionaryOnly = true;
// 建立新的正規表示式字典,並將其附加到該語言
FREngine.IDictionaryDescription dictDescr = baseLang.DictionaryDescriptions.AddNew(FREngine.DictionaryTypeEnum.DT_RegularExpression);
// 設定正規表示式
dictDescr.GetAsRegExpDictionaryDescription().SetText(@"[$0-9,.]+");

另請參閱

使用字典 RegExpDictionaryDescription