Ruby连字符分隔的浮点数正则表达式疑难解答

ctilley79

我遇到一个问题,我将尝试通过代码来表示。我的正则表达式提取此字符串中的两个数字,将它们转换为双精度,然后将它们存储在数组中。正则表达式不起作用的情况是只有一位数字时。我在代码的注释中提供了存储在数组中的值的示例输出。

each_row = ["5.8 - 3.0%"] #works
each_row = ["5 - 71%"]    #doesn't work
each_row = ["5.0 - 7%"]   #doesn't work
each_row = ["5.0 - 71%"]  #works

each_row.map do |row|
  value_pair = row.scan(/\d+.?\d+ - \d+\.?\d+/).map do |token|
    token.split(" - ").map(&:to_f)
  end

  puts value_pair[0][0] #5.8
  puts value_pair[0][1] #3.0

end
威克多·斯特里比尤(WiktorStribiżew)

您只需要使用可选的非捕获组

/\d+(?:\.\d+)?\s+-\s+\d+(?:\.\d+)?/

解释:

  • \d+ -一个或多个数字
  • (?:\.\d+)?-非捕获的可选组((?:...)?),该与点后跟一个或多个数字匹配
  • \s+ -一个或多个空格符号

使用scan,您需要一个非捕获组,以便不提取该组捕获的值。

一些更多的想法

您必须\d+.?\d+匹配1+个数字,后跟1或0个点,后跟1+个数字。两个加号需要2位数字。除了上面已经建议的选项之外,您还有什么选择?

如果您允许.05使用类似的值\d*\.?\d+,则可以使用0+位数后跟一个可选(1或0)点和1+位数来匹配。这不会将整数值与末尾带点的点匹配(例如54.)。

要使结尾的浮点数或整数与一个点匹配,可以使用\d+\.?\d*

通过与+*量词和可选组一起使用您可以将建议的表达式调整为将来可能需要的任何条件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式以逗号分隔的浮点数列表

来自分类Dev

正则表达式从字符串中捕获浮点数(并替换为捕获的浮点数)

来自分类Dev

正则表达式解析浮点数

来自分类Dev

正则表达式仅匹配浮点数

来自分类Dev

仅与正则表达式匹配浮点数

来自分类Dev

正则表达式,字符串浮点数,摆脱其他字符

来自分类Dev

正则表达式,字符串浮点数,摆脱其他字符

来自分类Dev

CSS疑难解答

来自分类Dev

CSS疑难解答

来自分类Dev

Python正则表达式字符串数组到浮点数组

来自分类Dev

从字符串中提取浮点数-正则表达式-Python

来自分类Dev

Twitter处理程序(sensu和ruby)疑难解答

来自分类Dev

正则表达式以匹配字符串中的最后一个浮点数

来自分类Dev

URL重写疑难解答

来自分类Dev

PHP PDO查询疑难解答

来自分类Dev

疑难解答Python Quiverplots

来自分类Dev

RPM依赖关系疑难解答

来自分类Dev

mysql查询疑难解答

来自分类Dev

Python的综合疑难解答

来自分类Dev

正则表达式仅匹配长文本中的浮点数

来自分类Dev

接受有效浮点数的正则表达式[PHP]

来自分类Dev

正则表达式PHP删除所有浮点数

来自分类Dev

正则表达式用于固定长度的浮点数

来自分类Dev

使用kohana路线的正则表达式负浮点数

来自分类Dev

正则表达式以一种模式搜索数字或浮点数字

来自分类Dev

用于整数,整数或浮点数的正则表达式

来自分类Dev

如何使用正则表达式从文本中选择浮点数或整数

来自分类Dev

浮点数的精确正则表达式不起作用

来自分类Dev

Python正则表达式,如何查找两个浮点数之间的数字