サクラエディタで正規表現デバッグ(数値マッチング)その2
先日のサクラエディタで正規表現デバッグ(数値マッチング)(https://kadono.xsrv.jp/2013/07/18/2062)の続きです。数値を抜き出すことはできましたがここで問題が発生。またしても検索してみましたがズバリの答えはすぐに見つかりませんでした。仕方がないので正規表現パズルを解くことにします。
何がNGかといますと下位桁の0が不要らしいのです(仕様になくてもダメなものはダメというパターン)。指数部は無いらしいので先日のパターンの小数点以下の0を削ってみます。最後が0以外ならば残す仕様。
ボツ1
上記のボツ1を実行すると小数点以下がすべて0という意地悪なパターンが残ってしまいます。
ボツ1結果+ボツ2
簡単に思いつくのがボツ1の後にボツ2も実行して2段階で処理する方法ですが工数がかかります。巨大データを処理するにはストレージ容量やアクセス時間も必要なのでよくありません。(ゴネるには使えるか?という程度)
候補1
小数点以下オールゼロ(だけ?本当に?)が例外なので条件分けで一気に処理するのが安直な対策です。
候補1結果(検証パターン不足で良さそうに見えていました)
一応、冗長な記述を除いた([+-]?[0-9]+)(\.(?=0)|(\.?[0-9]*[1-9])))0*から$1$3への置換で少なくともサクラエディタ上では期待する結果は得られるようですが得られませんので動作保証などは一切できません。私のメモですのであしからず。
追記)…と書いて巨大データで実行したところ、やはり上記候補1はバグっていました。具体的なベンチは故意に伏せますが([+-]?[0-9]+)((\.?[0-9]*[1-9])|\.(?=0))0*が(今のところ…)正解のようです。候補1は意図せぬ数値化けが起きますので使えませんでした。