用ruby代码替换字符串

用ruby代码替换字符串,ruby,Ruby,我编写了一个简单的程序,用用户输入替换(())中的文本: 例如,如果我有以下文本: i hab an terrible ((userinput1)) last ((userinput2)) in a horrible ((userinput3)) 我首先尝试用{替换((和))为} 我认为问题在于我在代码中写道: str2[s..s+1] = '#{' 而不是 str2[s..s+1] = "#{" 因为我所有剩余的代码都是一个对象,直到它被}关闭。那我该怎么办?我希望你能理解我的问题 s

我编写了一个简单的程序,用用户输入替换(())中的文本: 例如,如果我有以下文本:

i hab an terrible ((userinput1)) last ((userinput2)) in a horrible ((userinput3))
我首先尝试用{替换((和))为}

我认为问题在于我在代码中写道:

str2[s..s+1] = '#{' 
而不是

str2[s..s+1] = "#{"
因为我所有剩余的代码都是一个对象,直到它被}关闭。那我该怎么办?我希望你能理解我的问题

str1 = gets.chomp

word = str1.scan(/\(\(\w+\)\)/)

word.each do |word|
str1.gsub(word, "what the fuck")
end

puts str1

很好的尝试。但有一个更简单的方法。更简单:)基本上,您只需收集用户输入。已经有了替换字符串部件的方法

userinput1 = gets.chomp
userinput2 = gets.chomp
userinput3 = gets.chomp

template = "i had a terrible ((userinput1)) last ((userinput2)) in a horrible ((userinput3)"

result = template.gsub('((userinput1))', userinput1).
                  gsub('((userinput2))', userinput2).
                  gsub('((userinput3))', userinput3)
              #    ^^ replacing happens here    
puts result

您需要
eval()
该字符串或其他东西抱歉,(())之间的内容发生了变化,因此我不能简单地使用userinput1,2,3如何在[0..7]之间进行gsub?啊,所以它也是动态的?没问题。您必须遍历字符串并找到占位符。然后你要求用户输入值并进行替换。那么扫描的语句必须是什么呢?我尝试了一些与str1.scan(/(())/)有关的东西,但不起作用?它必须是一个正则表达式。试试这个:
str1.scan(/\(\w+\)\)/)
str1 = gets.chomp

word = str1.scan(/\(\(\w+\)\)/)

word.each do |word|
str1.gsub(word, "what the fuck")
end

puts str1
userinput1 = gets.chomp
userinput2 = gets.chomp
userinput3 = gets.chomp

template = "i had a terrible ((userinput1)) last ((userinput2)) in a horrible ((userinput3)"

result = template.gsub('((userinput1))', userinput1).
                  gsub('((userinput2))', userinput2).
                  gsub('((userinput3))', userinput3)
              #    ^^ replacing happens here    
puts result