◀一般トップへ
  • 7573 正規表現で文字列中の数字の桁をそろえたい。
    • 7574 Re: 正規表現で文字列中の数字の桁をそろえたい。
    • 7578 Re:正規表現で文字列中の数字の桁をそろえたい。
      • 7584 Re2:正規表現で文字列中の数字の桁をそろえたい。
  • [7573] 正規表現で文字列中の数字の桁をそろえたい。 ろろ 2013年02月17日 00:20

    a123 a123
    a45 ---> a045
    a6 a006

    置換前 (\D+)(\d)\n
    置換後 ${1}00${2}
    置換前 (\D+)(\d\d)\n
    置換後 ${1}0${2}

    教えて下さい。
    一度の置換でできますか?よろしくお願いします。
    • [7574] Re: 正規表現で文字列中の数字の桁をそろえたい。 しみづ 2013年02月18日 00:20


      perlで組むなら、拡張子をplsにして、さしずめ

      $seltext = GetSelectedString(0);
      $seltext =~ /(\D+)(\d+)/;
      $head = $1;
      $num = $2;


      $seltext = sprintf("%s%.3d",$head,$num);
      InsText("$seltext");

      かな。

      macマクロでは無理かな。
    • [7578] Re:正規表現で文字列中の数字の桁をそろえたい。 あかま 2013年03月12日 06:02

      サクラエディタの置換で一度にこれを置換する方法は思いつきませんでしたが、wshのjsマクロで置換処理を一度で済ますスクリプトを組むなら
      > Editor.SelectAll();
      > Editor.InsText(Editor.GetSelectedString().replace(/(\D+)(\d+)
      ([\r\n])/g,function(d,a,b,c){return a+(("00"+b).slice(-3))+c;}));
      でいけます。
      perlなどでも出来ると思いますが、あらかじめ
      > eval(Editor.GetSelectedString());
      とかいう内容のマクロを組んでおいて、対象のファイル中に上述のマクロを手書きして範囲選択してマクロ実行とすれば比較的手軽に実行出来ます。
      > eval("Editor.SelectAll();Editor.InsText(Editor.GetSelectedString()."+Editor.GetSelectedString()+");");
      とするなどで実行時の記述量を減らすと使いやすいかもしれません。

      置換に使うキーワードの入力を一回だけ、という条件ならば
      > 置換前(\D+)(\d{1,2})([\r\n])
      > 置換後${1}0$2$3
      として「全て置換(A)」を複数回実行すれば行けます。
      邪道ですがUWSCなどで「全て置換(A)」を連打するスクリプトを外部コマンドやマクロから実行すれば操作としては一回入力一回実行にできます。
      マクロから直接置換ダイアログの入力が読めれば外部ツールに頼らずに済むんですが、現状そういうマクロ関数はないようなので外部ツール越しにサクラエディタを操作するなどが限界ではないかと思います。
      • [7584] Re2:正規表現で文字列中の数字の桁をそろえたい。 ろろ 2013年03月24日 07:47

        ▼ しみづ様 あかま様
        ありがとうございます。
        gawkで組むなら
        {
        split(gensub(/([^0-9]+)([0-9]+)/, "\\1,\\2","g", $0),arr,",")
        print arr[1] sprintf("%04d",arr[2])
        }
        検索ワード
        ①0埋め
        ②ゼロパディング
        ③ゼロフィル
        ④数字部分の桁数を揃える
        ⑤数字の桁をそろえる
        ⑥数値の整理 末尾からn番目の数値の桁合わせ(Flexible Renamerより)