4

我想做一个字符串替换,如果我在两个术语之间找到一个字符串,我会替换它,所以当我有一个字符串时:

"123 pre 456 post"

我可以得到:

"123 pre 789 post"

我可以通过执行以下操作来做到这一点:

string.sub(/(pre\s+)\S+(\s+post)/, "\\1789\\2")

但是,如果可能的话,我想避免使用这两个捕获。事实上,我想改用这样的正则表达式:/pre\s+(\S+)\s+post/获取捕获的范围,然后替换它。有没有办法做到这一点(使用标准的 Ruby 库)?

4

2 回答 2

6

你可以这样做:

"123 pre 456 post".sub(/(?<=pre)\s+\S+\s+(?=post)/, ' 789 ')
于 2012-12-20T11:05:50.927 回答
2

[]=操作员会这样做,尽管它会在适当的位置修改字符串

s = "123 pre 456 post"
s[/pre\s+(\S+)\s+post/] = '789'

替换整个 rexep 匹配,并且

s = "123 pre 456 post"
s[/pre\s+(\S+)\s+post/, 1] = '789'

替换指定的捕获组(您也可以使用命名的捕获组来执行此操作)。

应该适用于 1.8.7(尽管我认为那里没有命名的捕获组)和 1.9

于 2012-12-20T11:43:20.807 回答