DOBON.NET DOBON.NETプログラミング掲示板過去ログ

正規表現で数値をカンマ編集するには?

環境/言語:[XP .net1.1 VB.NET]
分類:[.NET]

txtreg06.Text = "^(([0-9]{3})([0-9]{3})([0-9]{3}))$"
Dim regex As Regex
Dim m As Match = regex.Match("123456789", txtreg06.Text)

txtr062.Text = m.Result("$2,$3,$4")

これだと結果 123,456,789 となるのですが
9文字以外の時等はどうしようもありません

perlだといくつかサンプル見つけたのですがVB.NETだと少し書き方が違うようで
うまくいきません
普通はFormatを使う処理ですが、正規表現でないとダメですか?
■No7052に返信(bOOさんの記事)
> 普通はFormatを使う処理ですが、正規表現でないとダメですか?

そうですよね
今回は入力制限を正規表現でやったのでどうせなら正規表現で全部できないかな?と思ったんです

もう少し頑張ってみてどうにもならなければformatを使うことにします
私も正規表現について詳しくありませんが、ループを使わずに、一発でということになると、かなり難しそうですが。perlのサンプルというのはどのようなものでしょうか?
■No7081に返信(管理人さんの記事)
> 私も正規表現について詳しくありませんが、ループを使わずに、一発でということになると、かなり難しそうですが。perlのサンプルというのはどのようなものでしょうか?

http://books-support.softbank.co.jp/pq/backnumber/042_ans_reader.html
http://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma
上の2つを参考にしてVB.NETでいろいろやってみたんですが
うまくいきませんでした
下三桁とそれ以上の桁に分割する

という処理を再帰的に繰り返し、分割できなくなった時点で終了するという処理ですね。

管理人さんの言うとおり一発では厳しいというか、出来ないと思います。
medakaさんが紹介されたページにいくつか一発で変換できるものがあり、VB.NETで試したところ、うまく行きました。

以下、「http://books-support.softbank.co.jp/pq/backnumber/042_ans_reader.html」より

Dim s As String = Regex.Replace("123456789", "\d+?(?=(?:\d{3})+(?!\d))", "$&,")

以下、「http://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma」より

Dim s As String = Regex.Replace("123456789", "(\d{1,3})(?=(?:\d\d\d)+(?!\d))", "$1,")
う〜ん
すごいですね
自分で理解できるようにがんばってみます
ありがとうございました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板