翻訳・機械翻訳・ポストエディットなど翻訳に関連する情報を発信
B-400_CATツールで使える正規表現・第11回

CATツールで使える正規表現・第11回

この連載では、翻訳の現場で役に立つ正規表現を取り上げながら、memoQやTrados StudioのようなCATツールで利用できる正規表現について解説しています。  

前回までで、正規表現で使用される14のメタ文字と、先読み・後読み・後方参照といった機能を紹介しました。今回は、それらを使って、特定の文字列があったりなかったりする翻訳単位を探してみましょう。 

目次 [非表示]

両方あるものを探せ 

「田中」を含む翻訳単位を探してください、と言われたら、もちろん田中で検索します。正規表現を使うまでもありません。「田中」と「鈴木」のどちらかを含む翻訳単位なら、田中|鈴木で検索できます。では、「田中」と「鈴木」の両方を含む翻訳単位を探すことはできるでしょうか。 

翻訳単位のどこかに「田中」があって、その後に文字がいくつかあって「鈴木」がある、と考えれば、正規表現は田中.*鈴木となります。でも、田中さんが鈴木さんより先とは限りません。鈴木さんが先でも検索できるようにするには、田中.*鈴木|鈴木.*田中とする必要があります。 

田中さんと鈴木さんの2人なら、これでよいのですが、「田中」と「鈴木」と「佐藤」をすべて含む翻訳単位を検索したいとなったらどうでしょう。3つの文字列が出現する順序として可能な組み合わせは6通りあります。そのそれぞれを「|」でつなぐ、というのは御免被りたいですね。 

 

アサーションを重ねる 

結論から言うと、「田中」と「鈴木」の両方を含む翻訳単位は、先読みを使って^(?=.*田中)(?=.*鈴木).*で検索できます。でも、どうしてこれで検索できるのでしょうか。 

最初の^が翻訳単位の冒頭にマッチしようとしますが、先読みアサーションがあるので、すぐにはマッチできません。まず、その直後が.*田中にマッチするかどうか、すなわち翻訳単位に「田中」が含まれているかどうかが調べられます。 

翻訳単位に「田中」が含まれていなければ、条件が満たされないので、^がどこにもマッチできません。そのため、この正規表現は、「田中」を含まない翻訳単位にはマッチしません。 

一方、翻訳単位に「田中」が含まれていれば、^(?=.*田中)が翻訳単位の冒頭にマッチしようとします。しかし、先読みアサーションがもう1つあるので、まだマッチできません。次に、翻訳単位に「鈴木」が含まれているかどうかが調べられます。 

ここで重要なことは、先読みアサーションが0幅マッチであるため、「鈴木」の検索が翻訳単位の冒頭から始まるということです。言い換えると、「田中」が見つかったら、検索開始位置が冒頭に戻ります。そのため、出現順序を気にする必要がないのです。 

翻訳単位に「鈴木」も含まれていれば、はれて条件が満たされ、^(?=.*田中)(?=.*鈴木)が翻訳単位の冒頭にマッチします。そのあとの.*はどんな文字列にも貪欲にマッチするので、この正規表現が翻訳単位全体にマッチするというわけです。 

これなら、「田中」と「鈴木」と「佐藤」のすべてを含む翻訳単位も^(?=.*田中)(?=.*鈴木)(?=.*佐藤).*で検索できます。条件がいくつになっても、もう怖くありません。 
なお、このような正規表現は翻訳単位全体にマッチするので、^(?=.*田中).* は、1つの翻訳単位の中に「田中」がいくつあっても、1度だけマッチします。 

 

ないものを探せ 

では、反対に、特定の文字列を含まない翻訳単位を探すことはできるでしょうか。 
特定の文字を含まない翻訳単位なら、文字クラスの否定を使って、簡単に検索できます。たとえば、半角数字を含まない翻訳単位は、最初から最後まで半角数字以外の文字が続けばよいのですから、^[^0-9]*$で検索できます。 

しかし、2文字以上の文字列を含まない翻訳単位となると、文字クラスの否定を使ったのでは、複雑怪奇な正規表現を書かなければなりません。2文字なら、たとえば「田中」を含まない翻訳単位は^[^田]*(田([^田中][^田]*)?)*$と、まだ手に負えますが(解説は長くなるので控えます)、3文字以上は考えたくもありません。 

うれしいことに、ここでも先読みが使えます。たとえば「田中」を含まない翻訳単位は、先読みの否定を使って^(?!.*田中).*で検索できます。 

「田中」と「鈴木」のどちらも含まない翻訳単位なら、^(?!.*田中)(?!.*鈴木).*でも検索できますが、「(Aがない)かつ(Bがない)」は「(AまたはB)がない」と同じ(ド・モルガンの法則)なので、^(?!.*(田中|鈴木)).*とすることもできます。 

 

1つだけあるものを探せ

もちろん、肯定と否定を組み合わせることもできます。そこで、「田中」を1つだけ含む翻訳単位を、「田中」を含むが「田中」2つは含まないと考えて、^(?=.*田中)(?!(.*田中){2}).*で検索できます。 

もっとも、「田中」を1つだけ含む翻訳単位は(?<!田中.*)田中(?!.*田中)でも検索できます。「田中」はあるが、その前にも後にも「田中」がないというわけです。なお、この正規表現は、翻訳単位全体でなく「田中」のみにマッチします。 

 

今回のまとめと次回の予告

今回は、正規表現を使った検索の総まとめとして、特定の文字列があったりなかったりする翻訳単位を検索する方法を紹介しました。この連載でまだ触れていない正規表現も若干ありますが、正規表現による検索はこれくらいにしようと思います。 

しかし、正規表現が力を発揮するのは、検索だけではありません。次回は、この連載の締めくくりとして、正規表現を使った置換について解説します。 

 

川村インターナショナルの翻訳サービス

川村インターナショナルでは、AIや機械翻訳の活用、プロセスの自動化やデジタル化による翻訳業務効率化ソリューションをご提案します。翻訳支援ツールの導入を検討している、自社の翻訳資産を活用して機械翻訳エンジンをカスタマイズしたい、など翻訳業務の効率化をご検討中の方は、ぜひお気軽にお問い合わせください。

​​

KIマーケティングチーム

KIマーケティングチーム

川村インターナショナルWebマーケティングチームです。開催予定セミナーやイベントの告知、ブログ運営などを担当しています。

この記事がお役に立ったらシェアをお願いします!

ホワイトペーパーはこちら

UI翻訳におけるポイントを解説!タグとのあくなき戦い

システム・アプリケーションのUI翻訳では、テキスト中のタグの扱いが翻訳品質を大きく左右します。特にCATツールを使用する場合、タグの誤操作は表示崩れや機能不全を起こすことがあります。本記事では、翻訳工程におけるタグの重要性と注意点をご紹介します。

感謝の言葉は文化の鏡 ~世界の言葉で「ありがとう」~

海外旅行や外国の方との会話で欠かせない言葉「ありがとう」。日本語・英語・中国語など9言語の「ありがとう」の語源や意味を紹介し、感謝の言葉に込められた文化や背景をわかりやすく解説します。


新着記事

UI翻訳におけるポイントを解説!タグとのあくなき戦い
感謝の言葉は文化の鏡 ~世界の言葉で「ありがとう」~
契約書翻訳をどう依頼する?担当者のための実務チェックリスト
世界一幸せな国 – デンマークの言語について
【memoQ/Trados】過去の翻訳を活用して翻訳を効率アップ!翻訳メモリの作成方法と導入のメリット