アーカイブ | 13:37

文字列処理っ!

2 12月

萌えブログだと思ったか?ガチだよ、ガチww(汚い忍者の口調で)

うふふ、毎日こんな内容で書きますよ♪

さて、今日のテーマは文字列処理です。今日は大まかに概要、明日は正規表現、明後日は書式設定の説明をする予定です。

C#の文字列処理

例えば、べたにURL抽出とかやってみましょうか。あるページ、ここではサンプルとしてMSDNにを使いますが、ページ中からリンク(href属性の内容)を抽出します。

var text = new WebClient().DownloadString(@"http://msdn.microsoft.com/ja-jp/");

var q =
    from Match m in Regex.Matches(text, @"href=""(?<url>.*?)""")
    where m.Success
    select m.Groups["url"];

foreach (var x in q)
{
    Console.WriteLine("URL: {0}", x);
}

URL: http://msdn.microsoft.com/ja-jp/ms348103
URL: http://i3.msdn.microsoft.com/Areas/Sto/Content/Theming/msdn/mm/NetReflector.css
URL: http://i3.msdn.microsoft.com/Areas/Sto/Content/Theming/msdn/mm/CorporatePromoSpot.css
URL: http://i3.msdn.microsoft.com/Areas/Sto/Content/Theming/msdn/mm/ShareThis.css
URL: http://i3.msdn.microsoft.com/Areas/Sto/Content/Theming/msdn/mm/default.css
後略

説明しようかと思うのは、以下の2つです。

  • パターン マッチ:
    • テキストから、特定のパターンになっている部分だけを抜き出す
    • 正規表現(パターン指定用の簡易言語)というものを使う
    • @"href=""(?<url>.*?)"""
      の部分
  • 書式指定:
    • 数値などを出力に適した形に整形する
    • "URL: {0}" の部分

PowerShellの文字列処理

C#の文字列処理、なんか長ったらしいですって?

そんなあなたにはPowerShellマジおすすめ!

$text = (New-Object
Net.WebClient).DownloadString(http://msdn.microsoft.com/ja-jp/&#8217;)

$text.Split(‘>’) |
    ?{ $_ –match ‘href="(?<url>.*?)"’ } |
    %{ $Matches.url } |
    %{ ‘URL: {0}’ –f $_ }

-match演算子の仕様の問題で少しやり方が違っていますが、前に書いたC#コードと同じ結果が得られます。

さすがに、文字列処理はシェル スクリプトの方が得意ですねぇ。

  • 引用符や\記号のエスケープが不要
  • -match: 正規表現を使ったパターン マッチ演算子
    • 右辺には、Regexクラスに渡すのと同じ正規表現を書きます
    • マッチ結果は $Matches 変数に自動的に入ります
  • -f: 書式(フォーマット)演算子
    • 左辺には、Console.Writeなどに渡すのと同じ書式を書きます。

文字列処理の解説ページ

意外と、この辺りを説明したページってないんですよねぇ。ちょっと言い訳するなら…

  • 正規表現や書式の部分は、見ての通り文字列で指定します。C#ではなく、C#中に別の簡易言語を埋め込む形になっています
  • この簡易言語は、C#というよりは、.NET Frameworkのライブラリ機能です。
    • C#に限らず、VBやF#、PowerShellなどからも利用できます
  • ライブラリの詳細はMSDNを見ればいいと思うよ ♡

MSDN見てくださいキリッ

公式ドキュメント

まあ、MSDNは詳細すぎてとっつきにくいというのはわかります。細かい内容を調べるには非常にありがたいんですけどもねぇ。ええ、細かいとこまで踏み込みたくない時はげんなりします。

というか、先生…コピペがしたいです…という方も多いかと思われます。一応、コード サンプル集みたいなものも、公式であるんですけども。

こちらで、検索してみてください!…と行きたいところなんですが、日本語サンプル少ないんですよねぇ… 英語ならそこそこ見つかります。

正規表現

正規表現の書き方については、別にC#や.NET Framework特有の書き方ではありません。

「正規表現」で検索してもらうと、PerlやJavaでの説明が出てきますが、ほぼ同じ書き方ができます。「サンプル集」とかもつけて検索するといいかもしれません。

ちなみに、こんなサイトもあります

書式設定

さて、問題はこちら。.NET特有です。

最近は、Pythonなんかは似た書式設定の仕方をするそうですねぇ。しかし、完全に一致とはいかないです。

こちらは、「C# 書式」や「C# フォーマット」などで検索する必要があります。簡易な説明は見つかるでしょう。

詳細は、やっぱりMSDNを読みましょう。

文字列中に簡易言語

ほんとは嫌なんですよねぇ、文字列中にC#とは別の何かの言語を埋め込むの。だって…

  • Visual Studioのサポートを受けれない
    • 補完が効かない
    • コードの色付けが効かない
    • ヘルプ代わりの説明も見れない
  • ビルド時にエラー検証が効かない
    • 動かしてみるまでエラーがわからない

等々。

普段、Visual Studioに全力で頼りきりなC#erとしては、結構致命的なんですよねぇ。

いつもなら、「MSDNは量多すぎてしんどいですって?Visual Studioに頼れば、そもそもドキュメントとか必要ないですから。MSDNとか読む必要ないですよ!」って言っちゃうんです、私。正規表現や書式設定の場合、そう言えないのがつらかったり。

C# Compiler as a Serviceな時代(C# 5.0のさらに次)が来れば、Visual Studioの拡張が書きやすくなるんで、正規表現や書式設定も楽になるかもしれませんねー。

広告