Ruby on rails Newb正则表达式问题-Ruby 1.9.2

Ruby on rails Newb正则表达式问题-Ruby 1.9.2,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我对编程相当陌生,尤其是Ruby,我一直在用正则表达式工作 我有一个字符串,如下所示: s = 'Your Product Costs $10.00' 我要做的是写一个表达式,所以我的匹配数据只等于价格,例如,我可以做以下的事情 r = /[$]\d....\Z/ 因此 match = r.match s => #<MatchData "$10.00"> match=r.match s => # 我的问题是,如果产品价格是100美元怎么办。我没有足够的外卡,我的对

我对编程相当陌生,尤其是Ruby,我一直在用正则表达式工作

我有一个字符串,如下所示:

s = 'Your Product Costs $10.00'
我要做的是写一个表达式,所以我的匹配数据只等于价格,例如,我可以做以下的事情

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

match = r.match s
 => #<MatchData "$10.00"> 
match=r.match s
=> # 
我的问题是,如果产品价格是100美元怎么办。我没有足够的外卡,我的对手是零

它可以用正则表达式来表示,比如说“通配符直到字符串结束?”或“通配符直到[字符]”,或者我必须找到字符串的长度,找到$character的位置,然后根据每个输入进行计数

谢谢。

也许你想要这个

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"> 
r=/\$\d+\.\d{1,2}/
s='您的产品价格为10.00美元'
s2='您的产品成本为1000.00美元'
r、 火柴
=> # 
r、 匹配s2
=> # 
它接受点之前的任意位数,点之后的一到两位数。您可以在{1,2}部分中更改这一点。请注意,如果将其更改为0,则必须将点设置为可选

小数点后的点和数字可选:

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

s = "Anything blabla $100060"
r.match s
 => #<MatchData "$100060">"
r=/\$\d+(?:\.\d{1,2})/
s=“任何blabla$100060”
r、 火柴
=> #"
小数点后的位数不限:

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

s = "Product price is: $1560.5215010"
r.match s
 => #<MatchData "$1560.5215010"> 
r=/\$\d+\.\d+/
s=“产品价格为:1560.5215010美元”
r、 火柴
=> # 
小数点和可选点后的位数不限:

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"> 
r=/\$\d+(?:\.\d{1,})/
s=“产品价格为:$1500”
s2=“产品价格为:$19.921501”
r、 火柴
=> # 
r、 匹配s2
=> # 
也许你想要这个

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"> 
r=/\$\d+\.\d{1,2}/
s='您的产品价格为10.00美元'
s2='您的产品成本为1000.00美元'
r、 火柴
=> # 
r、 匹配s2
=> # 
它接受点之前的任意数字,点之后的一到两个数字。您可以在{1,2}部分中更改它。请注意,如果将其更改为0,则必须使点成为可选的

小数点后的点和数字可选:

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

s = "Anything blabla $100060"
r.match s
 => #<MatchData "$100060">"
r=/\$\d+(?:\.\d{1,2})/
s=“任何blabla$100060”
r、 火柴
=> #"
小数点后的位数不限:

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

s = "Product price is: $1560.5215010"
r.match s
 => #<MatchData "$1560.5215010"> 
r=/\$\d+\.\d+/
s=“产品价格为:1560.5215010美元”
r、 火柴
=> # 
小数点和可选点后的位数不限:

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"> 
r=/\$\d+(?:\.\d{1,})/
s=“产品价格为:$1500”
s2=“产品价格为:$19.921501”
r、 火柴
=> # 
r、 匹配s2
=> # 

以下是您需要的regexp:

\$(\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">
str1='您的产品价格为10.00美元'
str2='您的产品成本为100.00美元'
regexp=/\$(\d+\.\d+)/
regexp.match str1#=>
regexp.match str2#=>

关键是检查
。有一个很棒的网站可以测试正则表达式:

这是您想要的regexp:

\$(\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">
str1='您的产品价格为10.00美元'
str2='您的产品成本为100.00美元'
regexp=/\$(\d+\.\d+)/
regexp.match str1#=>
regexp.match str2#=>

关键是检查
。有一个很好的网站可以测试正则表达式:

一个正则表达式,它匹配一个数量,并确保匹配的是一个实际数字,而不是一系列数字或随机字符:

/\$([1-9]\d*|0)(\.\d{1,2})?/
匹配
$123.1
$123.12
$123
$0.12

不匹配
$01.12
$12.


进一步阅读:

一种正则表达式,它匹配一个数量,并确保匹配是一个实际数字,而不是一系列数字或随机字符:

/\$([1-9]\d*|0)(\.\d{1,2})?/
匹配
$123.1
$123.12
$123
$0.12

不匹配
$01.12
$12.


进一步阅读:

@Alin:对不起,我现在已经解决了。谢谢@Thiago您仍然需要修复
[$]
。如果你需要逃避
$
使用
\$
。哇,很好的解释,蒂亚戈,真的超越了它。我真的很感谢你的帮助。这正是让我超越阅读文档所需要的。说真的,非常感谢。@Alin再次感谢!:-)不过,我觉得你的正则表达式还是比较好的+1尽管这取决于询问者的需要。
[\d?]+
匹配一个或多个数字或问号。包括零在内的任意位数的正则表达式是
\d*
。此外,您应该像@Alin那样将点和尾随数字视为一个原子单位:
(?:\。\d+)
。您的方式与以点结尾的“数字”不匹配,例如
12.
。(顺便说一句,我知道这个问题很老了,但我第一次就漏掉了,这些错误需要解决。)@Alin:对不起,我现在已经解决了。谢谢@Thiago您仍然需要修复
[$]
。如果你需要逃避
$
使用
\$
。哇,很好的解释,蒂亚戈,真的超越了它。我真的很感谢你的帮助。这正是让我超越阅读文档所需要的。说真的,非常感谢。@Alin再次感谢!:-)不过,我觉得你的正则表达式还是比较好的+1尽管这取决于询问者的需要。
[\d?]+
匹配一个或多个数字或问号。包括零在内的任意位数的正则表达式是
\d*
。此外,您应该像@Alin那样将点和尾随数字视为一个原子单位:
(?:\。\d+)
。您的方式与以点结尾的“数字”不匹配,例如
12.
。(顺便说一句,我知道这个问题很老了,但我第一次就错过了,这些错误需要解决。)我真的很感谢你的帮助。也谢谢你链接到rubular,这似乎是一个很好的小实用程序,可以节省我前进的时间。很酷,没问题。我几乎每次都使用红细胞部位