• 締切済み

数値を検索する。ただし、桁区切り文字(カンマ、ピリオド、スペース)も含む

お世話になります。 今回はじめて投函させていただきます。 正規表現が初心者なものですのでご教示いただければ と思っております。 文章中の数値部だけを取り出すプログラムを作って おります。それで、正規表現を使って検索したい と考えております。 例えば 12345 などとなっている部分全体や 123,456 などとなっている部分全体 123.456 などとなっている部分全体 123 456 などとなっている部分全体 123,456 789.123 などとなっている部分全体 を検索したいと思っています。 先頭は半角数値(0-9)で、末尾も必ず半角数値(0-9) です。 数値と数値の間に許されるのはカンマ、ピリオド 半角スペースです。それらの文字の後に数値 が来ていれば、その後ろの数値も続けて検索範囲 としたいと思っています。 このような条件の正規表現はどのようにすれば よいでしょうか。 よろしくお願いいたします。

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

((\d+[, .])*\d+) のように$は不要です。あと,マッチした部分のみを抽出するためにパターン全体をカッコで囲む,と。 例えば Perl言語の例ですと, 質問文のような数字列が行中に含まれているか否かを判定するだけなら   if ($line =~ /(\d+[, .])*\d+/) でよいけれど, マッチした部分を特殊変数$1に抽出して以降のコードで利用したいなら,   if ($line =~ /((\d+[, .])*\d+)/) となるということです。 追伸. 123 456 のように間に半角スペースが連続すると(※)上記のパターンではマッチしない点については承知なさっているのですよね。 (※このWebページ上では半角スペース1つにみえるかもしれませんが)

ma-2005-04
質問者

お礼

本件ありがとうございました。 解決いたしました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

詳細な条件にもよるけど, 単純には 「最初と最後が 0-9 で, 途中は 0-9 か空白かコンマかピリオド」 というのをそのまま正規表現で書くだけでいいんじゃない?

ma-2005-04
質問者

補足

回答ありがとうございます。 そうしますと… (\d+[, .])*$\d+ という感じになりますでしょうか??

関連するQ&A