ruby - 将正则表达式与数值和小数匹配

标签 ruby regex

我需要将正则表达式与带小数的数字值匹配。目前我有/^-?[0-9]\d*(.\d+)/但它不占 .00 我该如何解决这个问题

当前有效:

1
1.0 
1.33
.00

当前无效:

Alpha Character 

最佳答案

您需要处理两种可能性(没有小数部分的数字和没有整数部分的数字):

/\A-?(?:\d+(?:\.\d*)?|\.\d+)\z/
#^   ^  ^            ^^     ^---- end of the string
#|   |  |            |'---- without integer part
#|   |  |            '---- OR
#|   |  '---- with an optional decimal part
#|   '---- non-capturing group
#'---- start of the string

或者全部设为可选并确保至少有一位数字:

/\A-?+(?=.??\d)\d*\.?\d*\z/
#  ^  ^  ^        ^---- optional dot
#  |  |  '---- optional char (non-greedy)
#  |  '---- lookahead assertion: means "this position is followed by"
#  '---- optional "-" (possessive)

注意:我使用非贪婪量词 ?? 只是因为我相信带有整数部分的数字更频繁,但这可能是一个错误的假设。在这种情况下,将其更改为贪婪量词 ?(无论您对“未知字符”使用何种量词都没有关系,这不会改变结果。)

关于ruby - 将正则表达式与数值和小数匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36946443/

相关文章:

c# - 在 .NET 中使用正则表达式拆分字符串

JavaScript 正则表达式获取句子中每个单词的第一个字符(波斯语和英语句子)

java - 在 Java 中使用正则表达式分割文本

ruby - Chef : Define same attribute with different values for different cookbooks

ruby-on-rails - 设计涟漪

ruby-on-rails - 具有内联样式的 Rails Haml

Java - 正则表达式 - 字母数字加/-

ruby-on-rails - 如何安排 Rails 邮件在特定日期发送 (heroku)?

ruby - 在 Ruby 中,如果我在循环内声明一个 lambda 函数,它会在每次迭代后正确清理吗?

Python 使用替换函数进行替换