紹介した正規表現の入門的なテクニックをこっちにも載せておきます。例題からちょっと訳あって、これまで型付けDataTableを使って書いていたロジックを、型無しのプレーンなDataTableに書き換える必要が出てきました。イメージ的にはこんな感じです(もちろん説明のためにかなり簡略化しています)。面倒なのはAssertの部分でカラムの数だけ同じような変換を繰り返す必要がある、という点です。変換のルールは「row.Title」だったら、「row["Title"]」に変換していく、という感じです。みなさんだったらどうやって変換していきますか?特にいい方法も思いつかないし、プチプチと手作業で変換していく、という人は意外と多いのではないでしょうか?こういうときは正規表現を使うと簡単に置換できます。実際にやってみましょう。エディタの置換機能を使って、以下のような条件を入力して実行します。row["$1"]するとあら不思議!一発で変換が完了します。正規表現は知らない人にとっては意味不明な呪文です。実際には呪文ではなく、それぞれにちゃんと意味があります。検索文字列の「row\.(\w+)」は以下のように分解できます。)\w+次にそれぞれの意味を説明してみます。直前の文字が一回以上連続するつまり、「row\.(\w+)」は"row"ではじまり、その次にドットがきて、任意の英数字が一回以上連続する文字列を検索せよ。英数字が連続する部分は$1に格納せよ。次に置換文字列の「row["$1"]」の解説ですが、こちらは簡単です。$1は検索時に格納した文字列を表しています。それ以外は普通の文字列です。Title」となり、「row["$1"]」は「row["Title"]」となるわけです。?呪文の意味が少しはつかめてきたでしょうか?プログラム中で正規表現を活用する上で紹介したのはエディタを使った置換テクニックですが、正規表現をサポートしている言語ならプログラム中でも正規表現を活用できます。プログラム中で何らかの文字列処理を実装する機会は結構多いと思います。正規表現を知らない人が先ほどと同じ置換処理をプログラミングすると、大体こんな感じになると思います。"株式会社は省略""]);正規表現を使わない場合の典型的な症状をリストアップしてみましょう。見つかった文字列の開始位置と終了位置を変数に格納するsubstring関数で文字列を切り出す文字列を一文字ずつ切り出してループ処理するetc...でもこれだと実装するのに時間もかかるし、ちょっとパターンの異なる文字列を渡されると、すぐにバグが出たりします。コードがものすごく読みにくくなってしまうので全く良いことナシです。正規表現を使えばほとんどの文字列処理はかなりシンプルかつ安全に実装できます。上のロジックはこのように書き換えられます。"株式会社は省略");最初のロジックと比較すると比べ物にならないぐらいシンプルになっているのが分かると思います。パターンが異なる文字列が渡されても、正規表現を使った場合は問題なく処理できています。正規表現の意味さえ分かれば、あとはこっちのモンです。正規表現を覚えて「できるプログラマ」になろう!おいらが新人だった頃、先輩から「正規表現は必ず習得しろ。」と言われたのが正規表現を勉強したきっかけでした。意味不明な呪文」でしたが、ちゃんと理解できると色々な場面で役立つ強力なツールだということが理解できました。正規表現をマスターしていないというプログラマは、ぜひ今から勉強を始めてみてください。色々な場面で生産性がグンと向上するはずです。見る正規表現について全く何も知らない初心者が読んでも理解できるよう、手取り足取り教えてくれます。後半になるにつれて内容が高度になってきますが、全部理解できなくても最初の2〜3章が理解できれば、そこそこ使えるようになるはずです。Rubyバージョンを作ってみました最近はRubyで仕事をしているので、この問題のRubyバージョンを作ってみました。"株式会社は省略");うむ、正規表現とgsubメソッドを使うと一撃ですね。*1:実務で見かけるコードはたいてい、もっと悲惨だと思いますが。はてなブログPro株式会社ソニックガーデンで働くRubyプログラマ。2017年11月に「プロを目指す人のためのRuby入門」を出版。blog)はてなブログをはじめよう!JunichiItoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。