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 expressionsregex 等有很多信息。也许搜索那些而不是 gsub

【讨论】:

其实需要一个反斜杠来转义小数,这是正则表达式中的特殊字符。 是的,斯蒂芬是正确的。我已经完全按照您所说的 Greg 进行了尝试,但它导致了错误 我非常不同意@StephRose。使用点来表示括号表达式中引用特定字符的任何字符是没有意义的。我在上面输入的内容在我的 Rails 控制台中运行良好。见here。当然,我无法解释 Al D 的错误。 您的正则表达式是正确的:"cat9.,dog".gsub(/[^0-9,.]/, '') #=> "9.,"。我希望您知道,在字符类中转义字符的规则与应用于字符类之外的字符的规则不同。句点不需要在字符类中转义。想想看。在字符类中匹配任何字符(或不匹配字符)有什么意义? 你知道,这是我的错误,我想我没有想到,虽然这很有意义。我想知道 OP 是否最初将逗号和小数放在字符类之外,这会导致异常。我站得更正了。 (当我们向他们学习时,总是会欣赏分歧!)

以上是关于Rails 去除除数字逗号和小数点以外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式去除一个字符串里面的数字和小数点以外的字符

PHP:删除除字母和数字以外的所有内容€“Reg表达式

从单元格中删除除数字以外的所有内容

从字符串中删除非数字字符(不包括句点和逗号)(即删除除数字、逗号和句点之外的所有字符)

如何使用正则表达式 python3 替换除空格和换行符旁边的数字以外的所有其他符号

从 PHP 中的字符串中删除除字母数字字符之外的所有内容