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

If you just want the numbers following foo_ to be changed

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

Note: Look-behinds will only work in versions or 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 に答える