正则表达式修改文本

时间:2013-03-27 16:40:30

标签: ruby regex

我可以使用正则表达式将文本连接到其他文本吗?

我有一个由以下字符组成的字符串:

"bird dog fish"

我想输出:

"bird catdog fish"

我会使用gsub来完成此操作吗?我感到困惑,因为如果我使用gsub匹配“狗”,我将不得不用“catdog”替换“dog”,而不是仅在其前面添加“cat”。如何在特定匹配项中添加一些文本?我是否必须使用扫描或什么?

1 个答案:

答案 0 :(得分:5)

更换有什么问题?

>>> "bird dog fish".gsub(/(dog)/, 'cat\1')
=> "bird catdog fish"

\1是对(dog)捕获组的引用。当然,(dog)可以是任何有效的正则表达式,因此这个示例可以在更复杂的情况下轻松使用。

如果需要,您可以拥有多个捕获组。

>>> "bird dog fish".gsub(/(dog)(.*)(sh)/, 'cat\1\3\2')
=> "bird catdogsh fi"

Ruby 1.9引入了命名的捕获组

>>> "bird dog fish".gsub(/(?<mydog>dog)/, 'cat\kmydog')
=> "bird catdog fish"

这是Ruby。 始终有很多方法可以做到这一点。更多信息可以在标准文档中找到。