【问题标题】:manipulation string using regex using ruby使用 ruby​​ 使用正则表达式操作字符串
【发布时间】:2014-05-05 05:05:21
【问题描述】:

如何在 ruby​​ 中正则表达式这个字符串?

我有这样的示例字符串:

a = "$65,000 /year for 2 years"
b = "Total of $120,000 ($60,000 per annum)"
c = "$40,000.0"

如何使用正则表达式获得这样的结果:

a = "$65,000"
b = "$120,000"
c = "$40,000"

怎么做?

感谢之前

【问题讨论】:

  • 为什么在字符串b中只有$120,000 而不是$60,000
  • Regex for Money 的可能重复项(对于问题的正则表达式部分)

标签: ruby regex string


【解决方案1】:

这适用于 1,000 美元到 999,999 美元范围内的所有价格:

string[/(\$\d{1,3},\d{1,3})/, 1]

这也将从您的第二个字符串中提取正确的值 (120,000),因为它始终与字符串中的第一次出现匹配。

【讨论】:

  • 这也会捕获 `$10,11'
【解决方案2】:

您可以使用扫描功能。

irb(main):001:0> a = "$65,000 /year for 2 years"
=> "$65,000 /year for 2 years"
irb(main):002:0> a.scan(/\$[\d,]+/)
=> ["$65,000"]
irb(main):003:0>

【讨论】:

    【解决方案3】:

    使用这个:

    \$[^\s.]+
    

    在这里演示:http://regex101.com/r/mS3eP6

    并且可以通过使用match来完成

    喜欢这个

    b = "Total of $120,000 ($60,000 per annum)"
    c = b.match(/\$[^\s.]+/)
    c[0]
    
     => "$120,000"
    

    此正则表达式确保选择 $ 之后和空格或小数点之前的任何内容。 match 仅用于捕获第一个匹配项,因为这是您的要求

    【讨论】:

      【解决方案4】:

      您可以使用以下正则表达式:

      \$\d{1,3}(,\d{3})*
      

      它从$1 起捕获所有带有“,”千位分隔符的有效数字。
      你会得到:

      a[/\$\d{1,3}(,\d{3})*/]
      # => "$65,000" 
      b[/\$\d{1,3}(,\d{3})*/]
      # => "$120,000" 
      c[/\$\d{1,3}(,\d{3})*/]
      # => "$40,000" 
      "Total of $12"[/\$\d{1,3}(,\d{3})*/]
      # => "$12" 
      "More than $12,998,109,223"[/\$\d{1,3}(,\d{3})*/]
      # => "$12,998,109,223" 
      

      你也可以玩here

      【讨论】:

        【解决方案5】:
        a = "$65,000 /year for 2 years"
        b = "Total of $120,000 ($60,000 per annum)"
        c = "$40,000.0"
        
        p a[/\$[\d,]+/] #=> "$65,000"
        p b[/\$[\d,]+/] #=> "$120,000"
        p c[/\$[\d,]+/] #=> "$40,000"
        

        【讨论】:

          猜你喜欢
          • 2013-04-01
          • 1970-01-01
          • 2013-04-10
          • 2011-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多