2007.08.23

.Netで正規表現を用いて置換を行う。

.NETで正規表現を用い、一致した値があるかどうか
を調査する関数はRegexクラス(System.Text.RegularExpressions)
のIsMatchを使用することで行える。
IsMatchの引数には、対象文字列と正規表現のパターンを指定する。
戻り値としては単純にBoolean型が返ってくる。

例)
(System.Text.RegularExpressions.)Regex.IsMatch("A","[a-zA-Z]+")
戻り値:True

上記の例は単純に指定した文字列が英字(大小文字)かどうかを判断する
ものである。
対象の文字列が指定した正規表現のパターンに当てはまるか否かを
判断するのはIsMatchだが、正規表現のパターンに当てはまった値を
指定した文字に置換するというものもある。
置換を行うにはReplaceを用いて行う。
引数はString型のReplaceとほぼ一緒で、対象文字列の部分が正規表現
のパターンを指定するようになっている。

例)
Regex.Replace("Iロベックス","[a-zA-Z]+","ア")

上記の例は対象文字列に英字(大小文字)があった場合、「ア」に
変換するというものである。

正規表現を用いたReplaceはかなり使えるような気がするが、余り
使いどころは少ない。ただ、存在を知っていれば何かと役に立つ
のではないだろうか?

コメント (1)

.netの正規表現のすごいところは、match時の callbackを設定できるところじゃないですかね。
これを使うと単純な置換ではなく、

・社員番号がアルファベットで始まっていれば派遣テーブルから、数値のみの場合は社員テーブルから取得した社員名を付け足す。
 001024 ⇒ 001024:山田タロウ, X9970 ⇒ X9970:(派遣)覇健太郎
・コードが 13桁の場合は ISBN13で 10桁の場合は ASINで、AmazonWebserviceをクエリして書籍のタイトルを取ってきて置き換える。
・再帰的な置換をする。
 dict("<!--##dir##-->")="c:\confdir\": dict("<!--##file##-->")="<!--##dir##-->hoge.txt" 'みたいな定義の展開

なんてな『複雑で動的な結果への置換』でも、見た目は“置換”の1行で書けてしまうのですな。すげー。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
jin