5

我有很多看起来像这样的文件:

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 和一个块来做到这一点吗?如果没有,最干净的方法是什么?我真的在寻找一个优雅的解决方案,因为我总是可以暴力破解它,但觉得有一些正则表达式技巧值得学习。

4

3 回答 3

4

我不知道 Ruby(根本),但类似的东西应该可以工作:

"foo_1 foo_2".gsub(/(foo_)(\d+)/) {|not_needed| $1 + ($2.to_i + 1).to_s}

LE:我实际上使它工作:http ://codepad.org/Z5ThOvTr

于 2011-05-13T14:47:53.327 回答
4

如果您只想更改 foo_ 后面的数字

str.gsub(/(?<=foo_)\d+/) {|num| num.to_i+1}

注意:look-behinds 仅适用于版本或 Ruby >= 1.9。

于 2011-05-13T14:48:39.560 回答
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 }
于 2011-05-13T21:05:38.250 回答