我有很多看起来像这样的文件:
foo_1 foo_2
foo_3
bar_1 foo_4 ...
我想通过获取foo_[X]
的所有实例并用foo_[X+1]
替换每个实例来转换它们。在这个例子中:
foo_2 foo_3
foo_4
bar_1 foo_5 ...
我可以使用gsub和块来执行此操作吗?如果没有,最干净的方法是什么?我真的在寻找一个优雅的解决方案,因为我总是可以强迫它,但觉得有一些值得学习的正则表达式。
答案 0 :(得分:4)
我不知道Ruby(根本没有),但类似的东西应该有效:
"foo_1 foo_2".gsub(/(foo_)(\d+)/) {|not_needed| $1 + ($2.to_i + 1).to_s}
LE:我实际上让它成功了:http://codepad.org/Z5ThOvTr
答案 1 :(得分:4)
如果您只想更改foo_之后的数字
str.gsub(/(?<=foo_)\d+/) {|num| num.to_i+1}
注意:Look-behinds仅适用于版本或Ruby&gt; = 1.9。
答案 2 :(得分:2)
更简单的就是使用.next
"foo_1".next #=> foo_2
"bar_1 foo_1".next #=> bar_1 foo_2
所以,你可以像这样简化你的正则表达式和阻塞
"bar_1 foo_2".gsub(/\bfoo_\d+\b/) {|f| f.next }