« # お墓参りしてきました | トップページ | # 久しぶりに中華街 »

2013.03.20

# 翻訳者のための正規表現~置換その1

シリーズ、かなり間が空いてしまいました。

前回までで、検索の基本パターンはひととおりご紹介しました。次は、翻訳者にとって実際に活用する場面が多い

置換

に進もうと思っていたのですが、置換の話をどこから始めたらいいか、ずっと悩んでいたというのも間が空いた理由のひとつです。


いきなり難しくなるかもしれませんが、実用本意で始めてみることにします。

基本その2で、実用パターンとしてこれを挙げました。

行な[わいうえおっ]

送りがなに「な」を含む動詞「おこなう」の、すべての活用形を検索するパターンです。


では、このすべての出現箇所について

「な」を削除して、「行わ、行い、行う、行え、行お、行っ」にしたい

場合、どんな置換を指定すればいいのでしょうか。

今までの基本知識を総動員すれば、

1303201

となりそうですが、これは失敗します。自分で試してみてください。


正規表現を使う置換で多くの人がつまずくポイントのひとつは、ここなんではないかな、と実はひそかに思っています。つまり、正規表現の指定パターンが、

検索文字列と置換文字列で同じではない

というその1点です。


上の例で言うと、

行な[わいうえおっ]

のカッコ内は「わ、い、う、え、お、っ」のいずれか、というだけで、つまり順序はありません。だから、置換文字列に

行[わいうえおっ]

と指定しても、順序が決まっていない以上、勝手に置換するわけにはいかないのです。


ではどうするかというと、

検索文字列のなかで、置換する部分と、そのままにしておく部分を切り分ける

という発想をします。つまり、上の例であれば、

行な[わいうえおっ]

のなかで、

行な

の部分は置換するが、送りがなに当たる

[わいうえおっ]

の部分は置換せずそのまま残す、わけです。


そうすると、必要になるのは

検索文字列をパートに切り分け、その各パートを置換文字列のなかでA、B...のように参照する

ことです。わかりにくいと思いますが、続けます。


秀丸エディタの正規表現の場合、パートの切り分けに使うのが

¥f

という記号です(半角の円記号と半角のf)。上の例であれば、

行な¥f[わいうえおっ]

と指定します。これで、検索文字列は 行な [わいうえおっ] の2パートに区切られました。

そして、¥fで区切られた各パートを、置換文字列のなかでは

¥0、¥1、¥2...

で表します(半角の円記号と半角数字)。0で始まるところがちょっとイヤンかもしれませんが、

行な = ¥0
[わいうえおっ] = ¥1

と対応することになります。そこで、

¥0 のパート → だけに置換する
¥1 のパート → そのまま残す

という置換を指定すればいいことになります。実際のダイアログでは、

1303202

こうなります。赤下線のバートが

行な = ¥0 → 行

青下線のパートが

[わいうえおっ] = ¥1 → そのまま

ということになるのですが、わかっていただけたでしょうか。


ただし、今回ご紹介したのは秀丸エディタに固有の指定方法であり、Perl などでも使える汎用性の高い指定方法は別にあります。ただ、この指定方法はわりと直感的かなーと個人的に思っているので、ひとまずそれを紹介しました(というか、しばらく前のバージョンの秀丸エディタでは、これしか使えなかった)。



【今回のまとめ】

●検索文字列と置換文字列で正規表現の指定は同じではない

●[a-z] や (エディタ|エディター) などを検索文字列には指定できない

●検索文字列をパートに区切る記号は ¥f

●¥f で区切った各パートは ¥0、¥1、¥2... で参照する


【すぐに使える実用的なパターン】

検索文字列:[0-9a-zA-Z]\f ¥f [ァ-ヶーぁ-ん亜-熙]
置換文字列:¥0¥2

  ……半角文字と全角文字の間の半角スペースを削除

※解説が必要かもしれません。次回で解説します。

03:22 午前 翻訳者のPCスキル |

はてなブックマークに追加

« # お墓参りしてきました | トップページ | # 久しぶりに中華街 »

トラックバック


この記事へのトラックバック一覧です: # 翻訳者のための正規表現~置換その1:

コメント

この記事へのコメントは終了しました。