にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

正規表現で検索・置換

Problem 11のコードを書くときに問題文から400個の数字をコード上に写すときに、役に立ったのでメモ。
使い方の流れとしては、

  1. isearch-forward-regexpで置換したい部分の正規表現を探す
  2. replace-regexpで実際に置換を行う

を順番に行う。

実際にやったこと

二桁で記述された数値が400個。その中で、10の位が0のものはオクテットと判定されてしまいコンパイル時に不都合があったので10の位を削ることに。
いきなり置換を実行すると間違えてしまったときの手戻りが面倒なので、まずは手順1のとおりisearch-forward-regexpでテストする。この関数を使うと、正規表現を記述しながらマッチした文字列をハイライトしてくれるのでわかりやすい。
その結果、以下の表現を得ました。

0\([0-9]\)

1の位をカッコでくくっているのは、ここの部分を後方参照して残したかったから。
で、手順2の関数を使って実際に置換を行います。以下の順に入力。

M-x replace-regexp
0\([0-9]\)
 \1

これで、「04」のような表記は「 4」に置換されます。

もうちょっと便利に使いたい

確かに正規表現で置換できるのは便利だけども、いくつか面倒だった点は残ります。

  • マッチする正規表現を作成したらそのまますぐに置換作業に移行したい
  • replace-regexpは対話的ではないので対話的に置換するものが欲しい(あるのかも)

というわけで、もっと便利な使い方を探す・考えるのが次の課題。