xyzzyの正規表現で全角文字だけをヒットさせる
2008年7月1日 20:00
半角文字と全角文字の間に半角スペースを入れる人がいるのだが、そのような半角スペースを一括削除したいという話。
たとえばこんな感じ。
MS-DOS の dir コマンドに相当する Linux のコマンドは ls である。
これを、「MS-DOSのdirコマンドに相当するLinuxのコマンドはlsである。」としたいわけだ。
正規表現で全角/半角文字にマッチする文字クラスがあればよいのだが、xyzzyの正規表現にはない。
しょうがないので、半角文字を[!-~]、全角文字を[^!-~]で代用して次のような関数を作ってみた。
; 全角-半角間のスペース除去
(defun regularize-spacing ()
(interactive)
(goto-char (point-min))
(replace-regexp “\\([^!-~]\\) \\([!-~]\\)” “\\1\\2″ t)
(goto-char (point-min))
(replace-regexp “\\([!-~]\\) \\([^!-~]\\)” “\\1\\2″ t)
(goto-char (point-min))
(replace-regexp “\\([^!-~]\\) \\([^!-~]\\)” “\\1\\2″ t)
(goto-char (point-min))) ファイルに書く場合、”"内の\はクォートしなければならないのに一瞬はまったけど、とりあえずこれでそこそこ動く。