2010-12-06 10 views
1

私はプログラミングには新しく、具体的にはRubyです。私は正規表現を使って頭を浮かべています。私が持っているものNewb正規表現質問 - Ruby 1.9.2

は、次のような文字列です:

s = 'Your Product Costs $10.00' 

私がやろうとしているどのような式を記述なので、私の対戦データは、価格のみに等しく、例えば私がしました以下を行うことができました。

r = /[$]\d....\Z/ 

と私の問題があるので

match = r.match s 
=> #<MatchData "$10.00"> 

は、製品の価格は100.00ドル$何である場合。まあ、私は十分なワイルドカードを持っていないと私の試合はnilです。

「文字列の終わりまでのワイルドカードは?」という正規表現はありませんか?または "ワイルドカードまで[文字]"または文字列の長さを見つける必要があります、私の$文字の場所を見つけると、各入力に基づいてそれをカウント?

ありがとうございました。

答えて

2

あなたが望む正規表現は次のとおりです。

\$(\d+\.\d+) 

テストにRubyコード:

str1 = 'Your Product Costs $10.00' 
str2 = 'Your Product Costs $100.00' 

regexp = /\$(\d+\.\d+)/ 

regexp.match str1 # => <MatchData "$10.00" 1:"10.00"> 
regexp.match str2 # => <MatchData "$100.00" 1:"100.00"> 

キーが.をチェックすることです。あなたの正規表現をテストするための偉大なウェブサイトがあります:http://rubular.com/

+0

私は本当に助けに感謝します。 rubularへのリンクをありがとうと、私は時間を節約してくれます。 – Kombo

+0

クール、問題ありません。私は正規表現で何かをするたびにルブラーサイトを使用します。 – bowsersenior

1

多分これが欲しいですか?

r = /\$\d+\.\d{1,2}/ 

s = 'Your product costs $10.00' 
s2 = 'Your product costs $1000.00' 

r.match s 
=> #<MatchData "$10.00"> 

r.match s2 
=> #<MatchData "$1000.00"> 

ドットの前には任意の桁数、ドットの後には1〜2桁の数字を使用できます。これは{1、2}の部分で変更できます。 0に変更する場合は、ドットをオプションにする必要があります。小数点以下の桁数は無制限で

r = /\$\d+(?:\.\d{1,2})?/ 

s = "Anything blabla $100060" 
r.match s 
=> #<MatchData "$100060">" 

:オプションの小数点以下のドットと数字の両方で

小数点以下の桁数は無制限で

r = /\$\d+\.\d+/ 

s = "Product price is: $1560.5215010" 
r.match s 
=> #<MatchData "$1560.5215010"> 

とオプションのドット:

r = /\$\d+(?:\.\d{1,})?/ 

s = "Product price is: $1500" 
s2 = "Product price is: $19.921501" 

r.match s 
=> #<MatchData "$1500"> 

r.match s2 
=> #<MatchData "$19.921501"> 
+0

文字クラス内の単一の文字を置くには、方法やり過ぎです... –

+0

@Alin:申し訳ありませんが、私は今固定しました。ありがとう! –

+0

@Thiago '[$]'を修正する必要があります。 '$'をエスケープする必要があるなら '\ $'を使います。 –

3

量に一致し、またマッチが実際の数ではなく数字やランダムな文字の連続であることを保証する正規表現:

/\$([1-9]\d*|0)(\.\d{1,2})?/ 

マッチ$123.1$123.12$123$0.12など

$01.12$12.などと一致していません

さらに読書:http://www.regular-expressions.info/