如何搜索、递增和替换 Ruby 字符串中的整数子字符串?

发布于 2024-11-07 09:38:29 字数 330 浏览 0 评论 0原文

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

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

I have a lot of documents that look like this:

foo_1 foo_2

foo_3

bar_1 foo_4 ...

And I want to convert them by taking all instances of foo_[X] and replacing each of them with foo_[X+1]. In this example:

foo_2 foo_3

foo_4

bar_1 foo_5 ...

Can I do this with gsub and a block? If not, what's the cleanest approach? I'm really looking for an elegant solution because I can always brute force it, but feel there's some regex trickery worth learning.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

携余温的黄昏 2024-11-14 09:38:29

我根本不了解 Ruby,但与此类似的东西应该可以工作:

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

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

I don't know Ruby (at all), but something similar to this should work:

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

LE: I actually made it work: http://codepad.org/Z5ThOvTr

倾城泪 2024-11-14 09:38:29

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

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

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

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.

樱花坊 2024-11-14 09:38:29

更简单的是使用 .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 }

Even simpler is just using .next

"foo_1".next #=> foo_2
"bar_1 foo_1".next #=> bar_1 foo_2

So, you could simplify your regex and block like so

"bar_1 foo_2".gsub(/\bfoo_\d+\b/) {|f| f.next }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文