日本翻訳連盟(JTF)

翻訳の手作業を効率化する「正規表現」

第4回:個別指定と範囲指定、繰り返しの範囲指定

翻訳者、JTF副会長 高橋 聡

前回までで、任意の文字とその繰り返しを指定するいろいろなパターンを取り上げ、概念としての最長一致と最短一致についても説明しました。これだけだと、正規表現を活用できる範囲はまだそれほど広くないかもしれません。今回の内容まで進むと、応用範囲がぐっと広くなります。

第2回で、[0-9]という指定を使い、説明は後でと予告しておきました。

 西暦[0-9]+年

という指定で、いろいろな「西暦○○年」を検索できるパターンです(○○に当たる数字は何桁でもよい)。今回は、この大カッコ[ ]を使いこなせるようにします。

大カッコ[ ]のはたらきは簡単にいうと2種類あります。ひとつは「個別に指定した文字のいずれか1文字に一致する」、もうひとつは「指定した範囲の文字のいずれか1文字に一致する」です。

個別指定は、たとえば

 [東西南北]

のように指定し、これだと「東・西・南・北」の4文字のいずれか1文字にヒットします(試してください)。「東西」とか「南北」とか「東西南北」に一致するわけではないので、この動作には慣れが必要かもしれません。あくまでも1文字ずつの一致です。あるいは、

 [かきくけこい]

と指定すると、「か・き・く・け・こ・い」という6文字のうちいずれか1文字にヒットします。つまり「カ行の5文字」と「い」です。なんでこんなパターンを検索するのか、その理由は後述します。

範囲指定のほうは、大カッコ[ ]の中で半角ハイフン(-)を使います。こうすると、ハイフンの前の文字からハイフンの後ろの文字までの範囲を指定でき、そのうちのいずれか1文字にヒットします。すでに使ってみた

 [0-9]

は、「0から9の範囲」つまり「0・1・2・3・4・5・6・7・8・9」の10文字のいずれか1文字にヒットするパターンだったということです。

 [a-z]
 [A-Z]

なら、それぞれ「小文字のaからzまで」と「大文字のAからZまで」のアルファベットいずれか1文字にヒットします。また、[ ]の中には複数の範囲をまとめて指定することもできます。たとえば、アルファベットの大文字と小文字をどちらも含めたければ

 [a-zA-Z]

と書けるということです。このとき、a-zとA-Zの間には何の区切りも必要ありません。うっかり

 [a-z,A-Z]

のようにカンマを入力すると、「小文字のaからzまで」と「大文字のAからZまで」に加えて「カンマ」も候補になるだけです。間には何も入力せず、○-△という範囲指定をそのまま続けてください。いくつでも指定できるので、たとえば

[a-zA-Z0-9]

とすると、英数字すべて、つまり「英文字の大小文字文字と数字」を検索できることになります。

ちなみに、範囲指定は、その範囲の文字をすべて個別指定するのと同じです。つまり、

 [0-9]

 [0123456789]

と指定することもできますし、

 [a-z]

 [abcdefghijklmnopqrstuvwxyz]

という26文字の個別指定と同じということになります(面倒なので実際にはしませんけど)。

範囲指定の場合、英数字や英文で一般的に使う記号なら指定は特に難しくありません。ちょっと面倒になるのが、日本語の文字を指定する場合です。たとえば、「全ひらがな」にヒットさせるにはどうすればいいのでしょうか。強引に個別指定することもできるので、

 [あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょっ]

これでもきちんと機能します(清音、濁音、半濁音、小さい文字)が、どう考えても現実的とはいえません。やはり範囲指定のほうが実用的です。では、全ひらがなを検索したいとき、上の個別指定の始まりと終わりを使って[あ-っ]と指定できるかというと、そうはいきません。秀丸エディタ上で実際にやってみると、以下のように一部のひらがなにはヒットしないのです。

あまり詳しくは立ち入りませんが、コンピューター内部では、どの文字も文字コードというシステムに従って扱われています。ひらがな・カタカナ・漢字の1文字1文字に文字コードが割り当てられていて、文字の順番はそのコード順になっているからです。ですので、ひらがな・カタカナ・漢字の範囲については、決まっているパターンを覚えておくか、どこかにメモしておくのが確実です。

 全ひらがな……[ぁ-ん]        ※小さい「ぁ」から「ん」まで
 全カタカナ……[ァ-ヶー]       ※小さい「ァ」から長音記号「ー」まで
 全漢字  ……[亜-熙]        ※終わりは『康熙字典』の「熙」

なお、これは秀丸エディタ上の正規表現の場合なので、環境によって範囲指定が少し変わる場合もあります。

さて、大カッコ[ ]の1組で検索できるのは「いずれか1文字」です。2文字以上を検索する場合は、必要な数だけ[ ]を繰り返します。たとえば

 [0-9][0-9]
 [0-9][0-9][0-9][0-9]

こうすると、上のパターンなら数字2桁、下のパターンなら数字4桁という指定になります。また、

 [A-Z][A-Z][A-Z]

は大文字3文字の連続という意味になるので、たとえば「GPT」とか「UCL」などの3文字略語を検索できます。では、次の例はどうでしょうか。

 [書描][かきくけこい]

1文字目は「書」または「描」という漢字、2文字目は上でやった「か・き・く・け・こ・い」というひらがなです。こうすれば、「書か・書き・書く・書け・書こ・書い」のいずれか、または「描か・描き・描く・描け・描こ・描い」のいずれかにヒットすることになります。つまり、「書く」「描く」という二種類の動詞の活用形すべてを検索できるパターンということです。動詞の活用形すべてを検索したり修正したりするケースはわりと多いので(仕様にあわせて表記を統一する場合など)、このパターンは知っておくといいと思います。ただ、日本語の文法知識が少し必要になります。ここではあまり詳しく扱えないので、ここから先の話に不安がある方には、『国語教師が知っておきたい日本語文法』(山田敏弘、くろしお出版)など基本的な文法の本をおすすめします。以下、最小限の説明にとどめます。

動詞の活用を表にまとめると、こうなります。

簡単にいうと、「書か・書き・書く・書け・書こ」「笑わ・笑い・笑う・笑え・笑お」「読ま・読み・読む・読め・読も」のように、五十音表の五段にわたって活用する動詞を五段活用の動詞といいます。五段活用の一部では、「書い」の「い」、「笑っ」の「っ」、「読ん」の「ん」のように、本来の五段から外れる形もあって、これが「音便」という現象です。

「落ちる」「見る」のように、五段にわたらず、どの活用形にもイ段の形(落ち、見)が含まれるものは上一段活用の動詞といい、同じようにどの活用形にもエ段の形(食べ、寝)が含まれるものは下一段活用の動詞といいます。「来る」の活用形はやや特殊なので、カ行変格活用といいます(略して「カ変」)。「する」も特殊なのでサ行変格活用といいます(略して「サ変」)。サ変動詞は、基本形としては「する」のみですが、その前にいろいろな名詞が付くので実際には無数にあります。「運動する」のような〈熟語+する〉のほか、「サービスする」のようなカタカナ語までさまざまです。

このような動詞の活用を頭に入れておき(そのつど調べてもよい)、

 読[まみむめもん]

と指定すれば、動詞の活用形すべてを検索できます。ここまで来ると、正規表現の実力がだいぶ分かってきたのではないでしょうか。

ところで、[A-Z][A-Z][A-Z]とか[0-9][0-9][0-9][0-9]のように、大カッコを何回も指定する方法は、このくらいの回数になら使えますが、繰り返し回数がもっと多くなると使いにくくなります。そこで新しく登場する記号が、中カッコ{ }です。直前に指定した文字の繰り返し回数を指定する記号で、以下3通りの使い方があります。

 {n}  (数字のみ)直前の文字をn回繰り返す
 {n,}  (数字とカンマ)直前の文字をn回以上繰り返す
 {n,m}  (数字とカンマと数字)直前の文字をn回以上m回以下繰り返す
直前の文字は1文字でもかまいませんが、上で取り上げた大カッコと組み合わせると実用性が一気にアップします。たとえば、次のパターンで何を検索できるでしょうか。

 [。、]{2}

そう、句点(。)または読点(、)が2個ダブってしまった誤字を検索できますね。まあ、このくらいなら大カッコだけで

 [。、][。、]

としてもいいわけですが……
 [A-Za-z]{1,}

こちらは、「大小の英文字が1文字以上続く」という指定なので、すでに取り上げたプラス(+)を使うのと同じになります。[A-Za-z]+ですね。これだとあまり実用性はないかもしれませんが、たとえば次のようなパターンは使えそうです。

 [亜-熙]{5,}

こうすると「漢字が5文字以上続いている」箇所を検索できます。漢字はいくらでも続けられるのですが、続けすぎると読みにくくなる。ときには自分の書いた文章/訳文でこういうチェックをしてみるのもよさそうです。

 [0-9]{1,4}年

もうだいぶ読めるようになってきたと思います。「数字が1つ以上4つ以下」です。つまり、これなら数字の桁数の下限と上限を指定できるので、

 西暦[0-9]{1,4}年

と書けば、これでようやく、1桁から4桁の西暦だけを正しく検索できるようになります(連載の第2回を参照)。

(次回につづく)

第1回:正規表現とは何か

第2回:任意の文字と繰り返しの指定

第3回:最長一致と最短一致

○執筆者プロフィール

高橋 聡(たかはし あきら)

CG以前の特撮と帽子と辞書をこよなく愛する実務翻訳者。フェロー・アカデミー講師。日本翻訳連盟(JTF)理事・副会長。学習塾講師と雑多翻訳の二足のわらじ生活と、ローカライズ系翻訳会社の社内翻訳者生活を経たのち、2007年にフリーランスに。現在はIT・マーケティングなどの翻訳を手がけており、翻訳フォーラム(fhonyaku.jp)などの翻訳者グループで情報発信も行う。訳書に『機械翻訳:歴史・技術・産業』(森北出版)、『現代暗号技術入門』『イーサリアム 若き天才が示す暗号資産の真実と未来』(ともに日経BP)など。著書に『翻訳者のための超時短パソコンスキル大全』(KADOKAWA)、共著に『翻訳のレッスン』(講談社)がある。

共有