トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

9-11 OO4O仕様で整数部が0の小数の整数部の0を削除

正規表現パズル

OO4Oの数値の文字列化する処理において、
整数部が0の小数の整数部の0を削除する処理を正規表現で実装する。

それにあたって、上記の削除対象の前ゼロを検索する。

検索前


検索後


対象データ

-0.5
+0.5
0.5
10.5
15.5
+10.5
+15.5
-10.5
-15.5


正規表現

可変長戻り読みを使わない場合

((?<=^)|(?<=^-)|(?<=^\+))0+(?=\.)

可変長戻り読みを使う場合

(?<=^[-+]?)0+(?=\.)


ソース

using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string[] strArr = {"-0.5",
                           "+0.5",
                           "0.5",
                           "10.5",
                           "15.5",
                           "+10.5",
                           "+15.5",
                           "-10.5",
                           "-15.5"};

        //const string Pattern = @"((?<=^)|(?<=^-)|(?<=^\+))0+(?=\.)";
        const string Pattern = @"(?<=^[-+]?)0+(?=\.)";
        System.Console.WriteLine("Pattern {0}", Pattern);
        foreach (string each in strArr) {
            string WillOut = each;
            if (Regex.IsMatch(each, Pattern)) {
                WillOut += " matchs ";
                WillOut += Regex.Match(each, Pattern).Value;
            }
            else {
                WillOut += " no match";
            }
            System.Console.WriteLine(WillOut);
        }
    }
}


実行結果

Pattern (?<=^[-+]?)0+(?=\.)
-0.5 matchs 0
+0.5 matchs 0
0.5 matchs 0
10.5 no match
15.5 no match
+10.5 no match
+15.5 no match
-10.5 no match
-15.5 no match


解説

.NETで使える、可変長戻り読みは便利ですね。