正则表达式修改文本

zPr*_*mer 3 ruby regex

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

我有一个字符串组成:

"bird dog fish"
Run Code Online (Sandbox Code Playgroud)

我想输出:

"bird catdog fish"
Run Code Online (Sandbox Code Playgroud)

我会用它gsub来完成吗?我感到困惑,因为如果我使用"dog"匹配gsub,我将不得不用"catdog"替换"dog"而不是仅仅添加"cat".如何在特定匹配项中添加一些文本?我是否必须使用扫描或其他东西?

voi*_*hos 5

更换有什么问题?

>>> "bird dog fish".gsub(/(dog)/, 'cat\1')
=> "bird catdog fish"
Run Code Online (Sandbox Code Playgroud)

\1是对(dog)捕获组的引用.当然,(dog)可以是任何有效的正则表达式,因此这个例子可以很容易地用于更复杂的情况.

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

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

Ruby 1.9引入了命名捕获组:

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

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