C# [正規表現]

覚えるとクセになる正規表現。C#に限らずいろいろな場面で役に立ちます。
更新日 2016-02-13

Regex 正規表現

C# では正規表現を使った文字列処理が簡単に使えます。

Regex を使ったマッチングと抽出

()で括った正規表現を抽出できます。?<グループ名> を含めると、後からそのグループ名でアクセスできます。
String strLine = "1ケース(12個,882円)";
int nPrice = 0;

Regex regex = new Regex(@".*?(?<price>[0-9]+)円.*");
Match mRet = regex.Match(strLine);
if (mRet.Success)
{
	strPrice = mRet.Groups["price"].Value;
    nPrice = int.Parse(strPrice);
}

正規表現を使った数式文字列の計算アルゴリズム

文字列の計算式の計算結果を取得するにはいくつかの方法があります。A Math Expression Evaluator (VB.Net) やJScript.NET のEval 等です。しかしC#でしっくりする手法は無いようなので 正規表現の練習を兼ねて作ってみました。

DecimalCalc クラス

DecimalCalc 文字列の数式を計算する
四則演算及び剰余の他、Math クラスの関数に対応しています。とにかく隣り合う数値を括弧でくくり、それを抽出しては計算して置き換えるというのを繰り返します。 正規表現ゆえに非常にコストのかかる計算手法になっていますが、優しくに使う分には十分です。
DecimalCalc クラス(DecimalCalc.cs)
DecimalCalc.zip [VisualStudio 2012 C# プロジェクト一式]
DecimalCalc dc = new DecimalCalc();
Decimal dResult = dc.calc("1 + 2 + 5 * 2 + 0.1 / 2");

// dc.m_listProgress には途中の計算結果が出ます。
// 計算途中でエラーになると例外を放ります。
Math クラスの関数はReflection で呼んでいます。四則演算以外はノーチェックなのでバグがあれば教えて下さいませ。