将美元符号后的数字更改为字符串中的0

时间:2017-03-19 18:10:57

标签: ruby

我要做的是将$ sign后面的数字更改为字符串中的0。我可以做简单的“找到$符号,然后将其后的东西更改为0”,但问题是该数字可能有不同的位数。另一个问题是数字可能是非整数,如“2.5”,所以它必须容忍逗号,或负数如“-2” 例如:

我有一个字符串类型的等式:geoQuery40.on("key_entered", function(key) { // v-- Here's the change restaurantsRef40.child(key).once("value", function(snapshot42) { ...

我写如下:x^(-2) + 4x + 123 + 42.2 + 1

我想要的输出应该是:x^($-2) + $4x + $123 + $42.2 + 1

你知道怎么做吗?

现在我提出了想法,但我不知道ruby中是否存在这样的方法。

x^(0) + 0x + 0 + 1

在循环中,可能有一个函数可以修剪每个数字,直到它找到非数字字符(除了起始 - 和。模仿负点或浮点数)然后放入那个地方“0”。

2 个答案:

答案 0 :(得分:2)

r = /
    \$        # match '$'
    (?:       # begin a non-capture group
      -(?>\d) # match a hyphen followed by a digit in a positive lookahead
      |       # or
      [\d,.]+ # match one of the characters one or more times
    )         # end the non-capture group
    /x        # free-spacing regex definition mode

通常按如下方式编写。

r = /\$(?:-(?>\d)|[\d,.]+)/

"x^($-2) + $4,000x + $123 + $42.2 + 1".gsub(r, '0')
  #=> "x^(0) + 0x + 0 + 0 + 1"
"x^($-2) + $4x + $-123- $42.2 + 1".gsub(r, '0')
  #=> "x^(0) + 0x + 023- 0 + 1"

答案 1 :(得分:1)

您可以将{regex与String#gsub一起使用,如下所示:

"x^($-2) + $4,000x + $123 + $42.2 + 1".gsub(/\$-?\d+(\,\d+)*(\.\d+)?/,'0')
#=> "x^(0) + 0x + 0 + 0 + 1"