【问题标题】:Fix a regex to exclude false results修复正则表达式以排除错误结果
【发布时间】:2021-03-03 06:30:06
【问题描述】:

我正在编写一个文件解析器... 我有这个字符串

line = "E-Cluster HW active residency:  57.25% (600 MHz:   0% 972 MHz:  32% 1332 MHz: 6.8% 1704 MHz:  11% 2064 MHz:  50%)\n"

line.gsub(/[^\d.]/,'')
=> "57.2560009723213326.8170411206450"

line.match(/:\s+(\d+)/)[1]
=> "57"

我需要'57.25'

我该如何解决?

【问题讨论】:

  • \d 数字实际上仅表示 0-9,您必须包含可选的 . 后跟至少 1 个数字。类似/:\s+(\d+)/([.|,]\d+)?
  • 嗨罗伯托,你只想提取第一个数字吗?

标签: regex ruby


【解决方案1】:

你可以试试这个:

line = "E-Cluster HW active residency:  57.25% (600 MHz:   0% 972 MHz:  32% 1332 MHz: 6.8% 1704 MHz:  11% 2064 MHz:  50%)\n"

line.gsub(/[^\d.]+/,'').match(/\d+\.\d{1,2}/)[0]
=> "57.25"

带有正则表达式 /\d+\.\d{2}/match 可以让您的字符串最多保留 1 或 2 个小数点。

【讨论】:

    【解决方案2】:

    提取第一个数字
    line = "E-Cluster HW active residency:  57.25% (600 MHz:   0% 972 MHz:  32% 1332 MHz: 6.8% 1704 MHz:  11% 2064 MHz:  50%)\n"
    line[/\d+(?:\.\d+)?/]
    => "57.25"
    

    Ruby code proof

    说明

    --------------------------------------------------------------------------------
      \d+                      digits (0-9) (1 or more times (matching
                               the most amount possible))
    --------------------------------------------------------------------------------
      (?:                      group, but do not capture (optional
                               (matching the most amount possible)):
    --------------------------------------------------------------------------------
        \.                       '.'
    --------------------------------------------------------------------------------
        \d+                      digits (0-9) (1 or more times (matching
                                 the most amount possible))
    --------------------------------------------------------------------------------
      )?                       end of grouping
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多