読者です 読者をやめる 読者になる 読者になる

数値を3桁ごとに区切る正規表現

以下の 3 桁で区切る正規表現が面白かったので、C# でやってみました。

qiita.com

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

// 数値を 3 桁で区切る正規表現
// 参考:
// http://qiita.com/think49/items/b1bf02e5f4cfbb200b84

class TestRegex {
    static void Main() {
        string[] tests = {
            "1",
            "12",
            "123",
            "1234",
            "12345",
            "123456",
            "1234567",
            "12345678",
            "123456789",
            "1234567890",
        };

        // 文字列の前に @ を付けると、エスケープ無効になります。
        var reg = new Regex(@"(?=(?:\d{3})+$)");
        // 文字列の前に @ を付けない場合
        // var reg = new Regex("(?=(?:\\d{3})+$)");

        foreach (var t in tests) {
            var ss = reg.Split(t).SkipWhile(s => s.Length == 0);
            Console.WriteLine(string.Join(",", ss));
        }
    }
}

先頭の空文字を取り除くために、SkipWhile を入れています。リンク先の JavaScript のコードでは空文字は作られないようなのですが、C# との違いはよく分かっていません。

実行結果です。

1
12
123
1,234
12,345
123,456
1,234,567
12,345,678
123,456,789
1,234,567,890