我有很多像这样的文件:
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和块来完成这个吗?如果不行,最干净的方法是什么?我真的在寻找一种优雅的解决方案,因为我总是可以用暴力方法解决问题,但感觉有一些值得学习的正则表达式技巧。
我完全不懂Ruby,但是类似下面的代码应该可以工作:
"foo_1 foo_2".gsub(/(foo_)(\d+)/) {|not_needed| $1 + ($2.to_i + 1).to_s}
更新:我已经成功实现了:http://codepad.org/Z5ThOvTr
str.gsub(/(?<=foo_)\d+/) {|num| num.to_i+1}
"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 }
|not_needed|
。 - Wayne Conrad