# 翻訳者のための正規表現~勉強会の解説、その1
前回は、置換の初回からいきなり難しい話になってしまいましたが、先日(4/23)の勉強会に参加していただいた方には、\f の使い方もだいぶわかっていただけたかもれしません。
今回は、特別編として、先日の勉強会でみなさんからいただいたお題に対する回答を説明しながら、置換の実例をいくつか紹介しようかと思います。勉強会では、回答をスライドでお見せしながら、いくつか実際に試していただきましたが、公開録画では画面が見えないので、録画の説明音声を聞きながら、以下の説明を読んでいただくといいかもしれません。
これ以降、表記は以下のようにします。
・「お題」と【解説】の中では半角スペースを△、全角スペースを□で表します。
・【検索】、【置換】の中では、半角スペースも全角スペースも実際の文字で表しています。
・したがって、「回答」の文字列は、そのままコピペすれば試すことができます。
(コピペできる範囲は水色を付けてあります)
・【解説】を読む前に、できるだけ検索/置換の意味を自分で考えると練習になります。
お題その1
・Page△12 → 12ページ
【考え方の整理】
・数字はそのままにする(複数桁の場合もある)
・半角スペースは削除する
・"Page" → 「ページ」に置換する
・数字と「ページ」の順序を入れ替える
【検索】
Page \f[0-9]+
【置換】
\1ページ
【解説】
Page△ …… 英語の"Page"と半角スペース
\f …… 区切り文字
[0-9]+ …… 半角数字が1回以上出現
\1ページ …… 区切り文字 \f の後の部分(=数字)に、「ページ」を続ける
お題その1の応用
・Page△12 → 12ページ
・Page24 → 24ページ
【考え方の整理】
・数字はそのままにする(複数桁の場合もある)
・原典がいい加減で、半角スペースがあったりなかったりする
・どちらにしても、半角スペースは削除する
・"Page" → 「ページ」に置換する
・数字と「ページ」の順序を入れ替える
【検索】
Page ?\f[0-9]+
【置換】
\1ページ
【解説】
Page△? …… 英語の"Page"と、半角スペースが0回か1回
\f …… 区切り文字
[0-9]+ …… 半角数字が1回以上出現
\1ページ …… 区切り文字 \f の後の部分(=数字)に、「ページ」を続ける
前回書いたように、\f で区切ったパートを表すとき、1つ目は \0 で始まることに注意してください。したがって、今回の場合、数字に当たる部分は \1 です。
このお題のように、「一部を置換し、順序を入れ替える」というパターンを習得するだけで、正規表現による置換を活用できる場面は大きく広がります。ぜひマスターしましょう。
「応用」で違っているのは、半角スペースの直後のクエスチョンマーク(?)だけです。「ある文字があったりなかったりする」とき、これを使いこなせるとかなり実用性が上がります。
お題その2
・長いカタカナ語を最初の3文字にしたい
例:「クルーズ・コントロール」を「クルー」に
【考え方の整理】
・カタカナすべてを表すパターンは、[ァ-ヶ]
・2文字目以降には中黒(・)と長音記号(ー)も出てくる
・3文字目まで、とそれ以降を区切る
【検索】
[ァ-ヶ][ァ-ヶー・]{2}\f[ァ-ヶー・]+
【置換】
\0
【解説】
[ァ-ヶ] …… 1文字目はカタカナのみ
[ァ-ヶー・] …… 2文字目以降は長音記号と中黒もあり
{2} …… 直前の文字が2回繰り返される
\f …… 区切り文字
[ァ-ヶー・]+ …… 任意の数のカタカナ(長音と中黒を含む)が続く
\0 …… 区切り文字 \f の前の部分(=カタカナ3文字分)
途中で区切り文字 \f を使うことは予想できたと思います。\f より前の部分を
[ァ-ヶー・]{3}
と書いてもよさそうですが、こうすると箇条書きの行頭マークとして中黒が使われている場合にもヒットしてしまうので、1文字目だけパターンを変える必要がありました。
■
上の説明で使った {2} とか {3} とか、つまり「中括弧でくくった数字」は、基本編で説明していませんでした。
基本編では、「直前の文字を繰り返す」指定として、
アスタリスク(*)…… 0文字以上
プラス(+)…… 1文字以上
クエスチョンマーク(?)……0文字または1文字
を紹介しましたが、中括弧 { } を使うと、繰り返し回数を任意で指定することができます。
{2}、{3} のように数字を1つだけ指定すると(桁数は任意)、その回数の繰り返しになります。
例:
[0-9]{4}
2013 のような年号にヒットします。
{2,5} のように、カンマで区切って数字を2つ指定すると(桁数は任意)、その範囲の繰り返しになります。
例:
[ぁ-ん]{4,8}
4文字以上8文字以下のひらがなにヒットします。
{5,} のように、数字(桁数は任意)とカンマだけ指定すると、その数以上の繰り返しになります。
例:
[亜-熙]{4,}
4文字以上連続する漢字にヒットします。
第1回はここまでですが、以上の内容を練習するためのテキストも以下に貼っておきます。これをテキストファイルにコピペして、上の検索/置換を練習してみてください。
----------練習用テキスト・始----------
Page 1
Page5
Page 234
クルーズ・コントロール
ユーザーインタフェース
・クルーズ・コントロール(冒頭の中黒)
----------練習用テキスト・終----------
この記事へのコメントは終了しました。
コメント