【问题标题】:Replace text inside curly brackets (including the brackets themselves) in a string using Ruby and gsub使用 Ruby 和 gsub 替换字符串中大括号内的文本(包括括号本身)
【发布时间】:2011-06-29 12:44:27
【问题描述】:

我有一个字符串“这是我的 {foo} 字符串”。

我想用一些操纵值替换大括号的内容,例如:

“这是我的 FOO 字符串”

我已经走到这一步了:

result = mystring.gsub(/\{(.*?)\}/){|m| m.upcase}

但这会返回“这是我的 {FOO} 字符串”——即大括号仍然存在。

如何表达我的正则表达式,以便同时替换大括号?

【问题讨论】:

    标签: ruby regex


    【解决方案1】:

    产生的字符串是整个匹配,所以它包括大括号。由于您只想处理第一个捕获组中的部分,因此您可以在块中使用$1 而不是m

    【讨论】:

    • Sepp 在说什么? gsub 在运行时将每个捕获组转储为 $1、$2、$3。当 Ruby 解析正则表达式时,它使用 $numb 作为特殊变量。
    • 是的 - 谢谢 - 我可以做 result = mystring.gsub(/\{(.*?)\}/){|m| m=$1.upcase} 或简单的 result = mystring.gsub(/\{(.*?)\}/){$1.upcase}