yamaken1343’s blog

技術ブログもどき

正規表現で日本語文中の半角カンマ/ピリオドを全角に置き換える

全角スペースとか全角カンマとかプログラム中に混じると発狂してしまうので普段は直接入力できないようにしていますが, 日本語文中で使うとベースラインが崩れたりしていやらしいです.

しかしながら, あとで直接変換しようとすると, 英文が文中に混じっていたりすると非常に面倒です.

というわけで, 日本語文中の半角カンマ/ピリオドのみを全角に置き換えたいです.

後読みの正規表現を駆使して, 日本語の直後に存在する半角カンマ/ピリオドのみを変換します. 具体的には

s/(?<=[一-龠ぁ-んァ-ヶ]),/,/g

でいける(はず)です.

シェルスクリプトだと以下 sedだと-rでもダメそうだったのでperlです. sedgnu版とbsd版で差があったりするので常にperlで書いたほうが良いかもしれないですね.

#!/bin/sh

cat $1 | perl -pe 's/(?<=[一-龠ぁ-んァ-ヶ]),/,/g' | perl -pe 's/(?<=[一-龠ぁ-んァ-ヶ])\././g'

標準出力に出力されます. リダイレクトして上書きすると消えるので注意.

カッコも変換しておいたほうが良さそうですね.

#!/bin/sh

cat $1 | perl -pe 's/\((?=[一-龠ぁ-んァ-ヶ])/(/g' | perl -pe 's/(?<=[一-龠ぁ-んァ-ヶ])\)/)/g'

"("は先読みにしてます.