メインコンテンツへスキップ
正規表現は、正規表現ベースの辞書で、ある言語で使用を許可する単語と許可しない単語を定義するために使用されます。

正規表現のルール

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] — 1 文字を許可します。[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++ など) では、文字列リテラル内のバックスラッシュをエスケープする必要があります。この場合は、エスケープされたバックスラッシュが 2 つ必要になるため、結果としてバックスラッシュは 4 つになります。上記の例を 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” などの任意の組み合わせを表します (0 文字ではない任意の長さの単語で、a と b を任意の順序で任意の数だけ含むもの) 。一方、a|b+|c は “a”、“c”、および “b”、“bb”、“bbb” などを表します。

正規表現の例

日付の正規表現 日を表す数値は 1 桁 (例: 1、2 など) または 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]+

データキャプチャでの使用

field レベルの認識で正規表現を使用する場合、通常は正規表現に完全一致する単語のみを認識すれば十分です。この場合は、field を認識するための別個の言語を作成し、その言語に対して次のプロパティを設定することをお勧めします。
  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