Option化して自分をProgrammingしなおすためのブログ。本を出版するという業務を担当しています。「4H22M15S」という文字を見つけました。文脈から判断するに、4時間22分15秒を表しているようです。ここで上司から「その表記は読者にとって見づらいから、○時間△分×秒って表示に置き換えてね。あ、もちろんテキスト全体で同じような表現有れば全部ね。テキストファイルは数千行の内容で、一部に目を通すと...1月25日の勝田マラソンは4H25M56Sで完走することができた。次のレースではサブ4を達成したい。久米島トライアスロンは5H21M20Sだ。6月のバラモンキングは倍の距離なので気合を入れなければ。補給食として仙豆を家庭菜園で育て、元帥に献上すればクビは免れるはずだ。今日は重要な案件で秘密のファイルを作った。”34HM300SABC”だ。...のように、日本語と「○H△M×S」形式の表現が入り混じっています。紛らわしいことに、パスワードの文字列も入っています。素直に「H」を「時間」、「M」を「分」、という風に置換するとパスワードがめちゃくちゃになってしまうので単純な置換ははできません。一つ一つ地道に検索していく(Ctrl+Fなどで検索できますよね)可愛い部下を成長させるために、部下に丸投げする上司にかみつく途方に暮れる正規表現を使う今回は、5の「正規表現を使う」にチャレンジしましょう。置換作業が一瞬で終わりますよ。複数の文字列を一つの形式でまとめて表現する方法です。検索結果にヒットします。正規表現における・(ドット)は「任意の一文字」を表します。この・(ドット)の様な特殊な意味を持つ文字のことを「特殊文字」「メタ文字」などと呼びます。:直前の文字の1回以上の繰り返し*(アスタリスク):直前の文字の0回以上の繰り返しなどなど。地道に使いながら覚えるしか方法はないでしょう。正規表現を使うには正規表現に対応したテキストエディタを用いることで検索や置換をスムーズに行うことができます。残念ながらWindows標準搭載の「メモ帳」は正規表現に対応しておりません。秀丸エディタさくらエディタNotepad++EmEditorEmacsViなどの、正規表現に対応したテキストエディタアプリをインストールする必要があります。テキストエディタには有料のものもあるので注意してインストールしてください。置き換えるという操作を行ってみましょう。※下記画像では秀丸エディタを用いています。方法は異なるため詳しくはお使いのエディタのマニュアルを確認してください。テキストファイルを開いたい状態で「置換」を操作。置換ダイアログが出てくるので「正規表現」のボックスにチェックをいれます。\の代わりに$を使って入力します。あとは「全置換」をクリック。置換され、パスワードにはそのまま置換されずに済んでいます。(ただの文字列)に分けられます。置換ボックスの箇所で説明します。2は半角数字を表すメタ文字です。0-9の、任意の数字一文字を表します。3は「直前の文字の1回以上の繰り返し」です。4Hはそのまま普通の文字のHです。”\d+”という表現は「半角数字の1回以上の繰り返し」を意味します。1111111234238492343などの文字列は全て正規表現の”\d+”で表されるということですね。:検索にヒットした3番目の()で囲まれた要素...\の次にくる数字は、検索ボックスで使用した()の数だけ設定することができます。秀丸エディタの場合は\1、\2、\3ですが通常は$1、$2、$3と、$記号を用いることが多いです(また、ここで使う$の意味は、冒頭で説明した「行末を表す$」とは異なるので注意してください)。ポイントは、括弧で囲むと、その値を使って置換することができるということ。「(\d+)H(\d+)M(\d+)S」で検索をかけると\1には4、\2には25、\3には56が格納されます。下図の様なイメージですね。「\1時間\2分\3秒」の\1,\2、\3がそれぞれ、4、25、56と解釈されるため置換の結果は「4時間25分56秒」となります。別の例で、置換対象の文字列が「5H21M20S」である場合は「(\d+)H(\d+)M(\d+)S」で検索をかけると\1には5、\2には21、\3には20が格納されます。「\1時間\2分\3秒」の\1,\2、\3がそれぞれ、5、21、20と解釈されるため置換の結果は「5時間21分20秒」となります。置換時に値をそのまま使いたい場合は、括弧を突ければ\1などの表現で値を引き継ぐことができるのです。一つ例を挙げるとぼくはバナナがだいすきなの!ぼくは納豆がだいすきなの!ぼくはプロテインがだいすきなの!と言う文を、もう少し大人っぽく「私の好物は○○です」としたい場合、ぼくは(.*)がだいすきなの!を私の好物は\1ですに置換すれば\1の値が各行ごとにバナナ、納豆、プロテインに変換されるということです。.*は任意の文字列を表します。「がだいすきなの!」を「です。は”[オラ]+ぁ!”となり、(※[]で囲むと、囲まれた部分を1ブロックとして扱います。[]なしで”オラ+ぁ”としてしまうと、”オラララララララぁ”となってしまいます。は”[無駄]+ぁ!”という形で表せてしまうのです。ジョジョの紙面が大幅に節約できてしまいます。ぁ!」、となっていくことでしょう。ウリィ+!まとめところどころ脱線しましたが、言いたかったことは「正規表現をマスターすればテキスト編集効率が格段に上昇しますよ」、ということです。今回は触れませんでしたが”\n”が改行を表したり、”\t”がタブを表したり、という特殊な文字:エスケープシーケンス(エスケープ文字)と組み合わせることでより一層効率UPします。WEB上でも書籍でもいたるところに情報は転がっているので興味を持たれた方はぜひ、「正規表現」「エスケープシーケンス」などで調べてみてください。この文章を正規表現で一発置換するにはどうしたらいいか?なんて考えているとちょっとしたパズルを解いているみたいで楽しいですよ。=====編集後記:2週間ほどプールに行けていないのですが、どうも脳みその調子が悪いです。プールでクロールをすると、肩甲骨と首回りの筋肉がほぐれて血流が改善するのか?頭も気分もスッキリする気がします(体は疲れますが)。マシンスペックを疑う前にやるべき1つのこと[ROM]という名前の紛らわしさ。iPhoneの「容量」って何の容量??Windowsでも綺麗なフォントを使いたいあなたにMacTypeをKindleは小説メイン。ランの旅ブログは毎日更新しなければならないのか?profileブログ、2014年4月28日から書いてます。自分が試して良かったモノの紹介など。CapsLockキーをCtrlキーに割りあててしまおう!ノートPCのタッチパッドでスクロールもらくらく。M570tを使うならSetPointをインストールしよう!マグネシウム不足に塩化マグネシウム入浴。エプソムソルトより安いよ。オイルで経皮摂取もおすすめ。ゼロポジションという水着がすごい!スイムが苦手・お尻が沈むトライアスリートにオススメ。エプソムソルトで筋肉ほぐし(マグネシウム不足の人におすすめ。家に取りに来てくれるので便利です。