【C#】文字列の書式指定と正規表現を扱ったメソッドがめんどくさい【記録】

C#

 

どうも、湯川です。

 

相変わらずC#で苦戦していますが、今回は「独習C#」で学んだ標準ライブラリについて書いていきます。

 

解説や説明というよりかは、インプットしたことをしっかりと理解できているかの確認的な記録です。

 

文字列操作

 

文字列操作は本当に覚えるのが大変でした。

特に正規言語とかいうやたらめったら記号を使う表し方は読んでいるだけで頭が痛くなりました。

 

正規表現とは、文字列のルールみたいなものです。

どんな時に使うのかというと、「ここに入る文字列はわからないけど、半角英数字の文字が入ることになっている」、こういう時の「半角英数が入る」というのがルールで、これらは正規表現で表すことができます。

 

例えば、半角英数字なら「[a-z0-9]」という風にすることで表せます。これだけならまだ簡単で分かりやすいのですが、文字列のルールがあいまいになってくるにつれ地獄のような正規表現が待っていました。

 

最初読んだときは「なんだこの(@”[a-z0-9.!#$%&’*+/=?^_{|}~-]+@[a-z0-9-]+(?:\.[a-z0-9-]+)*”)ってやつは!呪文か⁉」と思いました。

 

上のは一応メールアドレスを識別する正規表現です。メールアドレスは英数字や記号などが混じった形で書かれているのでパッと見こんな大変なことになっちゃったんですね。

 

正規表現は、Regexクラスをインスタンスする際に設定することができます。インスタンス生成時にRegexオブジェクトに正規表現の設定を渡すことで、それにマッチした文字列を検索することができます。

 

 

実行結果

 

上のプログラムは、郵便番号を検索する文字列です。郵便番号は、「3つの数字(0~9)-4つの数字(0~9)」で構成されているとします。

 

なので、「\d{3}-\d{4}」の部分が正規表現です。

 

foreach文でpost配列に入っている文字列をひとつずつrgx(Regexオブジェクト)に設定されている正規表現とマッチするか比較しています(比較にはIsMatchメソッドを使用、返却値はbool型です)。

 

構造や扱い自体は簡単なのですが、正規表現のルールを作るのが結構めんどくさいです。自分で作ってみても、後から見返して「なんだこれ?」ってなりました。

 

他にも、文字の出力にはたくさんの表示形式があり、文字列の整形法だけでも書いていたらきりがないです。

 

フィル操作

 

あと、ファイル操作についても学びました。

 

ファイル操作には、System.IO名前空間の「StreamWriter」クラスと「StreamReader」クラスを使用します。

 

適当にメモ帳でサンプルの「sample.txt」ファイル作って、それにStreamWriterで書き込んだり、書き込んだのをSteamReaderで読み込んだりして遊びました。

 

いつもコンパイルなどの操作はすべてVisual Studioがやっているので、こうやって外部ファイルをプログラミング言語で意図的に操作するとなんだか新鮮な感じです。

 

ということで、一時は正規表現アレルギーになるところでしたが、なんとか理解することがでたのでよかったです。

 

本当にただの記録ですが、これからやるコレクションについても気付いたことなどをいろいろ書いていこうと思います。

 

では。

 

コメント