- PR -

正規表現による数値検索について

投稿者投稿内容
RUNA
会議室デビュー日: 2005/10/24
投稿数: 7
投稿日時: 2005-10-24 19:41
はじめまして。

私は最近C#をはじめました。
課題がありそれを解いているのですが
 文字列が数字のみの時:0
 文字列が数字のみでない時:-1
を返す問題でなんです。

他のスレでマイナスも含むというものがあったので
(http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6024&forum=7)
参考にさせていただいていたんですけれど
私の課題の方は+もーも含みたいのです。
さらに小数点も含みます。

チェックをかける文字列がいくつか与えられているんです。
 "123456" →0
 "1234.56" →0
 "-123.45" →0
 "+123.45" →0
 "ABCDEF" →-1
 "1+23" →-1
 "123-" →-1
 "-.123" →-1
 "-0.123" →0
にならなければいけません。

それで私がない知恵を振り絞ってここまでは考えたんです。
 Regex emailregex = new Regex("^[-+]?[0-9]");

でもこれでは結果が
 "123456" →0  成功
 "1234.56" →0 成功
 "-123.45" →0 成功
 "+123.45" →0 成功
 "ABCDEF" →-1 成功
 "1+23" →-1  0が帰ってきてしまう
 "123-" →-1  0が帰ってきてしまう
 "-.123" →-1 成功
 "-0.123" →0 成功

となってしまいます。どうすればよいでしょうか?
よろしくお願いいたします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-10-24 20:30
引用:

RUNAさんの書き込み (2005-10-24 19:41) より:
 Regex emailregex = new Regex("^[-+]?[0-9]");


これの意味するところは理解しています?'^'で文字列の先頭から、'[-+]?'で先頭が- or + が0回または1回繰り返されていて、'[0-9]'で次に続く文字が数字であること、となります。
コード:
Regex emailregex = new Regex("^[-+]?[0-9]+[.]?[0-9]*");


で行けるんじゃない?
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-10-24 20:39
お世話になります。

検索したらありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10278&forum=7&4
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-10-24 20:42
後、$が文字列の終端を表すはずなので、それをつければ完璧だと思いますよ。
(ただ、正規表現は方言が結構あるのでよく確かめてから。)

(課題は自分で解いてこそ価値があると思います。)
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-10-24 20:50
00を許容するのかとか、突き詰めると結構色々問題が出てきますが。

<引用>
なおこ(・∀・)さんの書き込み (2005-10-24 20:39) より:

検索したらありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10278&forum=7&4
</引用>

これでは必ず小数点を含むものしか探せないかと。

//なんかquoteがバグってるので手書きで引用。

[ メッセージ編集済み 編集者: Hongliang 編集日時 2005-10-24 20:52 ]
RUNA
会議室デビュー日: 2005/10/24
投稿数: 7
投稿日時: 2005-10-24 21:06
甕星さん、なおこ(・∀・)さん、冬寂さん、Hongliangさん
早速のご返答ありがとうございます。

甕星さんが教えてくださった方法を試してみました。
引用:
--------------------------------------------------------------------------------

Regex emailregex = new Regex("^[-+]?[0-9]+[.]?[0-9]*");

--------------------------------------------------------------------------------
問題の-.123は 制御できましたが
1+23 や 123- が0で帰ってきてしまいました。


なおこ(・∀・)さんが検索してくださったページを参考にして試してみました。
引用:
--------------------------------------------------------------------------------

検索したらありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10278&forum=7&4

--------------------------------------------------------------------------------
こちらは 普通の12346が-1で返ってきてしまい
問題の-.123も0のままでした。
Hongliangさんのご返答通りでした。

引用:
--------------------------------------------------------------------------------
00を許容するのかとか、突き詰めると結構色々問題が出てきますが。

<引用>
なおこ(・∀・)さんの書き込み (2005-10-24 20:39) より:

検索したらありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10278&forum=7&4
</引用>

これでは必ず小数点を含むものしか探せないかと。

//なんかquoteがバグってるので手書きで引用。
--------------------------------------------------------------------------------


甕星さんの教えていただいた方法に、冬寂さんの方法を追加して試してみました。
引用:
--------------------------------------------------------------------------------

後、$が文字列の終端を表すはずなので、それをつければ完璧だと思いますよ。

--------------------------------------------------------------------------------
こちらの方法で解決できました。
ご教授いただいた皆様本当にありがとうございました。

明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-10-25 10:50
123.を不許可にするなら

^[-+]?[0-9]+\.?[0-9]*$
ではなく
^[-+]?[0-9]+\.?[0-9]+$
ですね


OracleSQLパズル
http://oraclesqlpuzzle.hp.infoseek.co.jp


[ メッセージ編集済み 編集者: 重蔵 編集日時 2005-10-25 10:51 ]
RUNA
会議室デビュー日: 2005/10/24
投稿数: 7
投稿日時: 2005-10-26 00:48
明智重蔵さん
ご返答ありがとうございます。

引用:
--------------------------------------------------------------------------------
123.を不許可にするなら

^[-+]?[0-9]+\.?[0-9]*$
ではなく
^[-+]?[0-9]+\.?[0-9]+$
ですね
--------------------------------------------------------------------------------

教えていただいた方法も使わせていただきます。
本当に教えてくださったみなさまありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)