• 締切済み

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

お世話になります。 今回はじめて投函させていただきます。 正規表現が初心者なものですのでご教示いただければ と思っております。 文章中の数値部だけを取り出すプログラムを作って おります。それで、正規表現を使って検索したい と考えております。 例えば 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

  • コンマ(カンマ?)やピリオドの後にスペースを入れるべきか

    時々英語でアメリカ人とメールをすることがあるんですが、コンマやピリオドの後、文章をつなげたい時にスペースを空けるべきかどうかでいつも迷っています。 分かりにくいと思うので例を挙げますね。 ☆Hi,I'm Taro.How are you doing? と ☆Hi, I'm Taro. How are you doing? のどちらがいいのだろうということです。 日本語だと全角なので、句読点のあとにすぐ文章をつなげてもちょうどいいスペースがあるので気にならないんですよね。私はその感覚でスペースを空けなかったりするんですけど、それだとフォントの関係もあるのでしょうが何だか詰まって見える気がするんです。 かと言ってスペースを空けるとスカスカして見える気もしますし… 普段は相手に合わせて(相手が空けていれば空けるし、空けていなければ空けない)メールしているんですが、こちらからメールするときはどっちにするほうがいいのか、と思ってしまいます。 細かい話で申し訳ないんですが(笑)、教えてください。

  • Word2007の全角文字、全角スペースの検索方法

    またまた質問申し訳ありません。 Word2007の書類で、全角文字、全角スペースが混じってて、これらを検索して特定したいのですが、 やり方がいまいちわかりません。 過去の質問から、[!0-9a-zA-Z]を入力すれば半角文字以外を検索できるみたいですが、 半角のスペースやコンマを検索してしまいます。 これらの半角スペースやコンマを検索したくないのですが、検索からはずすにはどうすればよいでしょうか?

  • 複数のスペースをひとつのカンマで置き換えるには?

    WORDの文字の置き換えの質問です。 次のことをしたい場合、「検索する文字」「置換する文字列」にどういった文字をいれればよいのでしょうか?(特殊文字を使用するとおもわれます。いろいろやってみましたが、わかりません) 1.ひとつまたは複数あるスペースをカンマで置き換える。 2.行の先頭にあるスペースだけを削除する。

  • エクセルの数値をコピペ後の秀丸でもカンマ付きに

    エクセルの金額リストを、秀丸にカンマのついた数字のままコピーしたいです。 ・エクセル 1,000,000 (書式設定にてカンマ付きの数値に見えます) ・秀丸 1000000 (コピペではこうなってしまいます) ・秀丸 1,000,000 (←このようにしたいです) 正規表現でできるでしょうか? もしお分かりの方がいらっしゃいましたら、教えてください。よろしくお願いいたします。 (正規表現の知識は、\nと\tくらいしかわかりません、すみません)

  • エクセルでの数値の表記方法(桁区切りや小数点)

    数値に桁区切り表示や小数点表示をする場合、日本や英米では、例えば1千2百34万5千6百78小数点9なら、12,345,678.9 のように、桁区切りはカンマ、小数点はピリオドで表記しますね。 ところがヨーロッパでは、ドイツ、イタリア、ベルギーなどでは、12.345.678,9 のように、桁区切りはピリオド、小数点はカンマで表記します。 また、フランスやロシアでは、12 345 678,9 のように、桁区切りはスペース、小数点はカンマで表記します。 スイスでは言語(独、仏、伊)にかかわらず、12'345'678.9 のように、桁区切りはアポストロフィー、小数点はピリオドです。 Window自体を「地域設定」で直してしまえば、国別にあわせ数値の表記方法は如何様にも対応はできると思いますが、実は今作成しているエクセルはシートごと数値の表記を変えたいのです。1シート目には日本語、2シート目には英語、3シート目がフランス語のようになっており、各シートは1枚目に入力した数値を参照して計算し、表示されます。したがって、地域設定は使えないと思います。 このようにシートごとに数値の表記方法を変えるにはどうしたらよいのでしょうか? ご教示くださいませ。

  • Excel(mac)での桁区切り点が付けられない

    Excelは苦手で仕事でも遅れがちになってしまいますが、今特にこれらの2点に困っています。知っている方がいましたら教えてください。 (1)Excelで大量のデータに一括で桁区切りのカンマを付けようと思い、「セルの書式設定」→「表示形式」→「数値」→「桁区切りにチェック」(ツールバーの「桁区切り点」ボタン)を使用したのですがかかりません。がその後セルを一つずつダブルクリックするとカンマが表示されます。なぜこうしたことが起こるのでしょう?解決方法はありますか? (2)数値の上2桁の後ろに半角スペースを一括で入れたいのですが何か良い方法はあるでしょうか? どうぞよろしくお願いします。

  • 正規表現で特定文字に挟まれた範囲内での検索

    VS CODE にて文字列の正規表現で文字列(プログラムではありません)の検索をしたく質問いたします。 (A B C)<A B C> という文字列があり、この中の半角スペースを別の文字に置換したいのですが、全ての空白ではなく( )に挟まれた中の半角スペースだけを検索したいと思っています。 ↑の用な文字列から( )内の半角スペースだけを照らし出す正規表現を教えていただいていただけると嬉しいです。

  • VBA 1セルからスペース区切り 文字列の切り取り

    Fa0/22_______________________disabled_____1____________auto___auto_10/100BaseTX Fa0/23_______________________notconnect___1____________full___100__10/100BaseTX Fa0/24_______________________connected____1__________a-full__a-100_10/100BaseTX 「_」アンダースコアは半角スペースに読み替えてください。 上記のような文字列を各セルに貼り付けています。上記の例では3行です。 この中の半角スペース以外の文字列を切り出して他のセルにコピーしたいのです。 Fa0/22 disabled 1 auto auto と結果的に5つに分解したいのです。 切り出す文字数は上記の通り様々でして、半角スペース数も常に固定という訳では ありません。 正規表現を使うのだと思いますが具体的にどう検索すればよいのか分かりません。 ご教示のほど、よろしくお願いします。

  • カンマ区切りの金額を検索するための、正規表現を教えてください

    PHP4を使っています。 表題のとおりなのですが、 カンマ区切りの金額を検索するための、正規表現を教えていただけないでしょうか? http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/regex-3-14.html を参考に、 $pattern = '^(0|([1-9][0-9]{0,2}(,[0-9]{3}){0,2}))$'; if (preg_match("/$pattern/", $oneline_buffer, $matches)){ としているのですが、 なぜかpreg_matchにひっかかりません。 (preg_match の直前の行を通っていることは、確認済みです) どなたか、お助け願えれば幸いです。

    • ベストアンサー
    • PHP
  • 文字列に半角スペースがあるかのチェック

    文字列に半角スペースがあるかのチェックを正規表現を使って行いたいのですが、どのように書けばよろしいでしょうか? 開発環境はeclipse、開発言語はjavaを使っています。

    • ベストアンサー
    • Java