Ruby on rails Newb正则表达式问题-Ruby 1.9.2
我对编程相当陌生,尤其是Ruby,我一直在用正则表达式工作 我有一个字符串,如下所示: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美元怎么办。我没有足够的外卡,我的对
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,这似乎是一个很好的小实用程序,可以节省我前进的时间。很酷,没问题。我几乎每次都使用红细胞部位