CATツールで使える正規表現・第3回
この連載では、翻訳の現場で役に立つ正規表現を取り上げながら、memoQやSDL Trados StudioのようなCATツール※で利用できる正規表現について解説しています。※ CATツールとは、翻訳支援(Computer Assisted Translation)ツールの略称で、翻訳メモリや用語集を使って翻訳業務を効率化するためのツールを指します。
前回の記事では、a要素またはem要素またはstrong要素の開始タグまたは終了タグにマッチする正規表現として</?(a|em|strong)( .*?)?>を作りました。
HTML要素は数に限りがあるので、「または」を表す「|」を使ってHTML要素名を並べてゆけば、HTMLタグにマッチする正規表現を作ることができます。とはいえ、HTML要素名の全てを列挙するのは大変なので、今回は別の方法を考えましょう。
目次[非表示]
- 1.この中のどれか「[ ]」
- 2.「[ ]」の中は別世界
- 3.HTMLタグを探せ
- 4.数字を探せ
- 5.今回のまとめと次回の予告
- 6.川村インターナショナルの翻訳サービス
この中のどれか「[ ]」
HTMLの要素名は、ほとんどがアルファベットのみで表記されます。ただし、大文字で書くことも小文字で書くこともあります。「大文字または小文字の半角アルファベット1文字」も、正規表現では、メタ文字「[」と「]」を使って[A-Za-z]と簡潔に書くことができます。
このような「[ ]」で囲った正規表現を「文字クラス(character class)」といいます。文字クラスは、「[ ]」の中に列挙された文字のうちいずれか1文字とマッチします。たとえば、[文字]は「文」または「字」にマッチします。順序は任意なので[字文]としても同じです。
文字クラスでは、「-」を使って文字の範囲を指定することもできます。[A-Za-z]は、「A」から「Z」までの文字または「a」から「z」までの文字のいずれか1文字ですから、「大文字または小文字の半角アルファベット1文字」にマッチするというわけです。
「[ ]」の中は別世界
なお、「[ ]」の中では、「]」と「\」を除くメタ文字がその機能を失います。たとえば、.!?は任意の1文字の後に「!」があるかないかというパターンにマッチしますが、[.!?]は「.」または「!」または「?」にマッチします。そのため、「.」を検索したいとき、\.の替わりに[.]とすることもできます。
一方、すでに見たように、文字クラスでは「-」が範囲を表すという特別な意味を持ちます。もう1つ、「^」も文字クラスで特別な意味を持ちますが、それについては次回以降で紹介します。
「-」を含む1文字にマッチさせたいときは、文字リストの冒頭または末尾に「-」を置きます。たとえば「半角小文字アルファベットまたはハイフン」なら[-a-z]または[a-z-]とします。
「[」または「]」を検索しようとして[[]]とすると文法エラーになることに注意してください。3文字目の「]」で文字クラスが終わってしまい、4文字目の「]」の相手がいなくなってしまいます。
「]」も、文字リストの冒頭に置くことで、文字リストに含めることができます。そのため、[][]とすれば「[」または「]」を検索できます。また、文字クラスの中でも「\」を使ってメタ文字の効果を取り消すことができるので、[[\]]とすることもできます。
HTMLタグを探せ
さて、HTMLタグに戻りましょう。HTMLの要素名を、大文字または小文字のアルファベット1文字以上とすると、正規表現で[A-Za-z]+とすることができます。
これにマッチしないHTML要素は「h1」や「H6」などの見出し要素のみです。これらの要素名は、最初の文字が「H」か「h」のいずれか、次の文字が「1」から「6」のいずれかですから、[Hh][1-6]で検索できます。
そこで、HTML要素名にマッチする正規表現は[A-Za-z]+|[Hh][1-6]とすることができます。あとは前回の記事と同様に、すべてのHTML要素の開始タグまたは終了タグにマッチする正規表現は</?([A-Za-z]+|[Hh][1-6])( .*?)?>となります。
これでも、HTMLタグでない文字列にマッチしたり、HTMLタグなのにマッチしなかったりする可能性が残っていますが、もうほとんど暗号になったので、これくらいにしておきましょう。
数字を探せ
ここまでで、正規表現のメタ文字のうち「. ? * + [ ] |」の使い方を解説しました。これで、この連載の冒頭にあげた-?([0-9]*\.)?[0-9]+という正規表現の意味がわかるようになったので、解説しておきます。
後ろから見てゆきましょう。[0-9]+は、「0」から「9」までの文字、すなわち半角数字の1回以上の繰り返しですから、「123」や「9000」のような整数にマッチします。
その前の([0-9]*\.)?は、[0-9]*すなわち半角数字の0回以上の繰り返しの後に\.すなわち小数点が続くパターンがあるかないか、という意味です。あれば小数ですし、なければ整数です。
さらにその前の-?は、「-」があるかないかなので、負の数または正の数になります。
以上をまとめると、-?([0-9]*\.)?[0-9]+は「正または負の整数または小数」にマッチすることになります。
今回のまとめと次回の予告
今回は、「文字リストの中のいずれか1文字」を表す文字クラスを紹介しました。[A-Za-z]は大文字または小文字の半角アルファベット1文字、[0-9]は半角数字1文字にマッチします。
これらは直感的でわかりやすいですが、それでは、カタカナ1文字にマッチする正規表現は[ア-ン]でしょうか(実は違います)。次回は、文字クラスにおける文字の範囲について詳しく解説します。
前回までの記事と本記事の続きはこちら
|
川村インターナショナルの翻訳サービス
川村インターナショナルでは、AIやMTの活用、プロセスの自動化やデジタル化による翻訳業務効率化ソリューションをご提案します。翻訳支援ツールの導入を検討している、自社の翻訳資産を活用して機械翻訳エンジンをカスタマイズしたい、など翻訳業務の効率化をご検討中の方は、ぜひお気軽にお問い合わせください。
また、CATツールで使える正規表現のほか、川村インターナショナルでは業務効率化に役立つ「ツール・業務効率化」関連のブログ記事を公開しています。
翻訳を効率的に行うためのCATツールの解説や、日常業務に欠かせないWindowsやMicrosoft Officeアプリの意外と知られていない小ワザなど、関連記事のうちアクセス数の多い上位10記事をまとめました。
関連記事