新手问题 Ruby 怎么样实现原样替换,类似 substr

yakczh · 2015年09月24日 · 最后由 yuhaidonghd 回复于 2015年09月25日 · 2109 次阅读
require 'pp'
 DATA.each do |line |
    line  =~/(\d+,\d+)\s+(.*)/
    value= $1.gsub(",",'')

#pp $1
   puts $2,9.chr,value
end
__END__
     55,356 q1.txt
     58,688 q2.txt
     65,791 q3.txt
     70,185 q4.txt
     84,533 q5.txt
    104,454 q6.txt
    121,827 q7.txt
    142,584 q8.txt
    187,097 q9.txt
    253,817 q10.txt

替换的地方如果用了 gsub 就会覆盖掉原来的 $n 怎么样实现只是原样替换,不用正则

不要用替换,用删除。 value = $1.delete(',')

  • 既然你发现 gsub 会修改 $2,那么你在 gsub 之前用一个变量把 $2 保存下来不就好了。
  • 使用正则表达式时尽量不要用这种依赖全局变量的方式,用 String#matchRegex#match 会好得多。 ``` ruby DATA.each do |line | match_data = line.match /(\d+,\d+)\s+(.*)/ number = match_data[1].gsub(",", "") file = match_data[2]

puts "#{file}\t#{number}" end

- `9.chr` 这种写法还真没见过, `"\t"` 不好吗?`puts` 的输出结果每个参数都是单独一行,这样的格式是你真正想要的?
- 这个问题貌似压根就不需要用正则表达式,用 `String#split` 不就好了。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册