Rails 去除除数字逗号和小数点以外的所有内容
Posted
技术标签:
【中文标题】Rails 去除除数字逗号和小数点以外的所有内容【英文标题】:Rails strip all except numbers commas and decimal points 【发布时间】:2015-05-08 14:11:09 【问题描述】:嗨,我在过去一个小时里一直在为此苦苦挣扎,现在离得不远了。我如何从rails字符串中删除除数字、逗号和小数点之外的所有内容?到目前为止我最接近的是:-
rate = rate.gsub!(/[^0-9]/i, '')
这会去除除数字之外的所有内容。当我尝试在表达式中添加逗号时,一切都被剥离了。我从其他地方得到以上信息,据我所知:
^ = 不是
逗号左侧的所有内容都替换为右侧“”中的内容
不知道 /i 做了什么
我对 gsub 很陌生。有人知道关于构建表达式的好教程吗?
谢谢
【问题讨论】:
您还可以在方括号中包含逗号和小数点,只需用 \ 转义小数点,否则它代表任何字符。 “i”修饰符表示忽略大小写。 【参考方案1】:试试:
rate = rate.gsub(/[^0-9,\.]/, '')
基本上,您知道^
不是在您正在使用的字符类括号内 [],然后您只需将逗号添加到列表中即可。小数点需要用反斜杠转义,因为在正则表达式中它们是一个特殊字符,意思是“匹配任何东西”。
另外,请注意您使用的是gsub
还是gsub!
gsub!
有爆炸声,因此它会编辑您传入的字符串的实例,而不是返回另一个。
所以如果使用gsub!
,那就是:
rate.gsub!(/[^0-9,\.]/, '')
而rate
将被更改。
如果您不想更改原始变量,则可以使用不带 bang 的版本(并将其分配给不同的 var):
cleaned_rate = rate.gsub!(/[^0-9,\.]/, '')
我只是在谷歌上搜索教程。我一个都没用过。正则表达式需要大量时间和反复试验(以及翻转表格)。
这是一个很酷的工具,可以与 ruby 的迷你备忘单一起使用,让您可以快速编辑和测试您的表达式:
http://rubular.com/
【讨论】:
感谢一百万,效果很好。我尝试将逗号和小数点添加到 [] 但我没有转义小数点,这导致错误 注意:^
表示字符类中的否定(例如 [^0-9]);否则,^
表示字符串的开头。
我认为您不需要在字符类中转义小数点。【参考方案2】:
你可以用这个:
rate = rate.gsub!(/[^0-9\.\,]/g,'')
还可以查看此内容以了解有关正则表达式的更多信息: http://www.regexr.com/
【讨论】:
逗号永远不必在正则表达式中转义。句点不需要在字符类中转义。 (见@Greg 的回答。)【参考方案3】:您可以在方括号表达式中添加逗号和句点:
rate.gsub(/[^0-9,.]/, '')
您不需要 i
来区分数字和符号的大小写。
regular expressions
、regex
等有很多信息。也许搜索那些而不是 gsub
。
【讨论】:
其实需要一个反斜杠来转义小数,这是正则表达式中的特殊字符。 是的,斯蒂芬是正确的。我已经完全按照您所说的 Greg 进行了尝试,但它导致了错误 我非常不同意@StephRose。使用点来表示括号表达式中引用特定字符的任何字符是没有意义的。我在上面输入的内容在我的 Rails 控制台中运行良好。见here。当然,我无法解释 Al D 的错误。 您的正则表达式是正确的:"cat9.,dog".gsub(/[^0-9,.]/, '') #=> "9.,"
。我希望您知道,在字符类中转义字符的规则与应用于字符类之外的字符的规则不同。句点不需要在字符类中转义。想想看。在字符类中匹配任何字符(或不匹配字符)有什么意义?
你知道,这是我的错误,我想我没有想到,虽然这很有意义。我想知道 OP 是否最初将逗号和小数放在字符类之外,这会导致异常。我站得更正了。 (当我们向他们学习时,总是会欣赏分歧!)以上是关于Rails 去除除数字逗号和小数点以外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章
从字符串中删除非数字字符(不包括句点和逗号)(即删除除数字、逗号和句点之外的所有字符)