日本翻訳連盟(JTF)

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

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

翻訳者、JTF副会長 高橋 聡

さて、連載第2回です。ここから具体的に正規表現のルールを説明していきます。前回お断りしたように、この連載で使うのは秀丸エディタ準拠の正規表現です。応用性は高いのでご安心ください(TradosやPhraseでも使えます)。

さっそく前回の復習ですが、正規表現とは「文字列のなかから、指定したパターンとの一致を検索する仕組み」でした。ふつうの検索のように、指定した検索文字がそのままヒットするのではなく、パターンで指定すると、そのパターンに一致するいろいろな文字列がヒットするということです。これからの連載で覚えていくのは、その「パターンを指定するルール」だと思ってください。

いろいろな文字列がヒットするということで、まず単純に思いつくのは「何でもいいのでとにかく1文字に、もしくは2文字以上にヒットする」パターンです。こういう考え方を「ワイルドカード」と言います。英語ならwild card。もともとは、トランプで「どの札の代わりにもなるカード」の意味です。一般的にはジョーカーでしょうか。

Microsoft Wordではこの「ワイルドカード」という言い方をそのまま使っています。ただし、Wordのワイルドカードは、そういう「任意の1文字または2文字以上」という基本だけでなく、さらに細かい指定もできるように拡張されていて、結果的に正規表現と近いことができます(ただし、できること/できないことの差も含めて実際のルールはそれなりに違います)。ですから、ワイルドカードを使える人が正規表現を覚えるのはわりと簡単。その逆もまたしかりです。

任意の1文字

ここからは、前回まとめた一覧表もご覧になりながら読み進めるといいかと思います。そして、読みながら必ず自分でも試すことをおすすめします。自分でやってみないと覚えられません。

「任意の1文字」、つまり何でもいい1文字を表すパターンはピリオド(.)です。あ、そうそう、具体的に秀丸エディタでの指定方法を書いておかないといけませんね。[検索]フィールドにピリオド(.)を入力(半角で!)したうえで、[正規表現]にチェックを入れてください。

ピリオド1つが1文字に当たるので、任意の2文字ならピリオド2つ(..)、任意の3文字ならピリオド3つ(...)以下同、です。

といっても、実際にはピリオドだけ指定することはまずありません。前から順番に1文字ずつヒットしていくだけです。ただし、改行にはヒットしません(改行は秀丸エディタでは↓で表されています。この点はとても重要)。実際に多いのは、「ピリオドをほかの文字と組み合わせる」使い方です。たとえば、ピリオド4つを使って

 西暦....年

とすれば4桁の「西暦1961年」とか「西暦2199年」にヒットします。1961とか2199という4桁の数字がピリオド4つというパターンに一致するからです。「西暦794年」だと3桁しかないのでヒットしません。一方、「西暦二千二十年」とか「西暦より前の年」にはヒットします。ピリオドは「任意の1文字」、ということは算用数字でなくてもいいわけで、「二千二十」とか「より前の」とかの4文字でもこの条件には一致するからです。

正規表現を考える/学ぶときは、まずこういう動きに慣れてください。コンピューターというのは、「よくも悪くも厳密で忠実」だということです。ピリオド4つ、つまり「任意の4文字」という指定は文字どおり「任意の4文字」であって、「西暦のうしろは数字だ」といった判断は一切しません。ですから、慣れないうちは――いえ、かなり使い慣れてからでも――、こうだろうと思って指定した正規表現のパターンが思いもしない結果になることは頻繁にあります。検索ならまだしも、置換でこれが起きるとかなり困ります(置換の直後に気づけばCtrl+Zで戻せるので大丈夫)。

正規表現による検索・置換が予想外の結果になったときは、自分の指定したパターンをよくよく見直して理由を解明しましょう。そのプロセス自体が正規表現の勉強になります。

直前のパターンを繰り返す

上の例では4つとか3つとか、数を決めてピリオドを使いました。これでもまだ、できることは知れています。そこで次に使うのが、アスタリスク(*)、プラス(+)、疑問符(?)という文字、「直前のパターンを繰り返す」という指定です。これで一気に応用範囲が広がります。3種類ある細かいルールは次項で説明します。

たとえば、さっき使った

 西暦....年

のかわりに、

 西暦.+年

と指定してみます。ピリオド1つ(=任意の1文字)とプラス1つ(=1回以上の繰り返し)です。こうすると、「西暦79年」「西暦645年」「西暦2363年」に、さらにはそれ以上の桁数の「西暦○○年」にもヒットします。つまりこれは、任意の1文字を何回でもいいので繰り返し、最後に「年」が付く、という指定になっているからです。

ただし、これは「西暦○○年」を検索するという実用的なパターンには使えません。すでに説明したようにピリオドは算用数字に限らないので、たとえば「西暦になって最初の年」などにもヒットしてしまいます。「になって最初の」の部分もピリオドとプラス(.+)という条件には一致するからです(どんな文字でいいし、何回繰り返しもいい)。

任意の1文字ではなく数字だけを指定したい場合、ピリオドのかわりに[0-9]と指定します(大かっこ開き、0、ハイフン、9、大かっこ閉じ)。つまり

 西暦[0-9]+年

という指定になります。[0-9]という指定については、第4回で詳しく扱います。

繰り返しの回数

今しがた使ったプラス(+)は、1回以上の繰り返しでした。実際には、繰り返しの回数は3種類あります。

 アスタリスク(*) ……「直前のパターン0回以上」

 プラス(+) ……「直前のパターン1回以上」

 疑問符(?) ……「直前のパターンが0回または1回」

といっても、初めて聞くと(見ると)何を言っているのか分からないでしょう。特に「0回以上」が意味不明です。例で確認してみましょう。たとえば、「コンピュータ」と「コンピューター」、さらには「コンピューターー」の表記が混在してしまったとします。長音なし、長音あり、長音ダブりという3種類です。秀丸エディタで開いたファイル上にこの3つのパターンを書いておいて、

 コンピューター*(アスタリスク)

 コンピューター+(プラス)

の 2 つを検索したらどうヒットするか、試してみてください。「コンピューター*」は 3 つすべてにヒットしますが、「コンピューター+」だと長音なしにはヒットせず、長音ありと長音ダブりの 2 つにヒットするはずです。なぜそうなるか、以下の説明を読む前に自分でも考えてみてください。

(ここで1分間が経過したことにします)

この例だと、「コンピューター」の最後にある長音記号が「直前のパターン」に当たります。アスタリスク(*)を使った

 コンピューター*

は、「直前のパターン0回以上」です。0回以上ということは、長音記号が0回でもいいし1回以上あってもいいということです。0でもいいとは、すなわち「なくてもいい」ということ。だから「コンピュータ」「コンピューター」「コンピューターー」の3つすべてにヒットします。一方、プラス(+)を使った

 コンピューター+

は、「直前のパターン1回以上」なので、長音記号0回は含まれない、すなわち「なくてもいい」にはなりません。したがって、「コンピューター」「コンピューターー」の2つにヒットするというわけです。

では、疑問符(?)を使う「直前のパターンが0回または1回」になったらどうなるでしょう。また1分考え見てください。

(ここで1分間が経過したことにします)

「0回または1回」なので、「コンピュータ」にヒットします(長音がなくてもいい)。「コンピューター」もヒットします(長音が1回)。しかし、長音ダブりの「コンピューターー」にはヒットしません(1回以上ではないので)。

ただし、実際には「コンピューターー」のなかの「コンピューター」まで(1つ目の長音記号まで)にもヒットしてしまうことに注意してください(秀丸エディタの設定で、検索ヒットした箇所はハイライトされるようにしておくと分かりやすくなります)。このように、指定したパターンが、それより長い箇所の「一部にヒットしてしまう」現象にも注意する必要があります。

「直前のパターン0回以上」「直前のパターン1回以上」「直前のパターンが0回または1回」の違いを確かめたい場合は、「インタフェース」「インターフェース」「インターーフェース」という例で実験してみるともっとよく分かります。カタカナ「タ」の後が長音なし、長音あり、長音ダブりという3つです。この3つをまた秀丸エディタのファイル上に書いて、以下3種類のパターンの検索を試してみてください。

 インター*フェース(アスタリスク)

 インター+フェース(プラス)

 インター?フェース(疑問符)

アスタリスク(*)だと「インタフェース」「インターフェース」「インターーフェース」のすべてにヒットします。プラス(+)だと「インタフェース」にはヒットせず(他の2つにはヒットする)、疑問符(?)だと「インターーフェース」にはヒットせず、残りの2つにヒットします。

どうしてそうなるか、次回までに考えてみてください。

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

○執筆者プロフィール

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

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

共有