- - PR -
正規表現による数値検索について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 成功 となってしまいます。どうすればよいでしょうか? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-10-24 20:30
これの意味するところは理解しています?'^'で文字列の先頭から、'[-+]?'で先頭が- or + が0回または1回繰り返されていて、'[0-9]'で次に続く文字が数字であること、となります。
で行けるんじゃない? _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||||||
|
投稿日時: 2005-10-24 20:39
お世話になります。
検索したらありました。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10278&forum=7&4 | ||||||||
|
投稿日時: 2005-10-24 20:42
後、$が文字列の終端を表すはずなので、それをつければ完璧だと思いますよ。
(ただ、正規表現は方言が結構あるのでよく確かめてから。) (課題は自分で解いてこそ価値があると思います。) | ||||||||
|
投稿日時: 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 ] | ||||||||
|
投稿日時: 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-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 ] | ||||||||
|
投稿日時: 2005-10-26 00:48
明智重蔵さん
ご返答ありがとうございます。 引用: -------------------------------------------------------------------------------- 123.を不許可にするなら ^[-+]?[0-9]+\.?[0-9]*$ ではなく ^[-+]?[0-9]+\.?[0-9]+$ ですね -------------------------------------------------------------------------------- 教えていただいた方法も使わせていただきます。 本当に教えてくださったみなさまありがとうございました。 |