gpt4 book ai didi

ruby - 使用正则表达式替换字符串中的参数

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:35 24 4
gpt4 key购买 nike

我正在尝试遍历结构的元素,查找包含 {...} 格式的字符串,并用散列中的相应字符串替换它们。这是我正在使用的数据:

Request = Struct.new(:method, :url, :user, :password)
request = Request.new
request.user = "{user} {name}"
request.password = "{password}"
parameters = {"user" => "first", "name" => "last", "password" => "secret"}

这是尝试 1:

request.each do |value|
value.gsub!(/{(.+?)}/, parameters["\1"])
end

在这次尝试中,parameters["\1"] == nil

尝试 2:

request.each do |value|
value.scan(/{(.+?)}/) do |match|
value.gsub!(/{(.+?)}/, parameters[match[0]])
end
end

这导致 request.user == "first first"。尝试 parameters[match] 结果为 nil

谁能帮忙解决这个问题?

最佳答案

你的尝试都不会成功,因为 gsub! 的参数在调用 gsub! 之前计算。 parameters[...] 将在替换之前进行评估,因此无法反射(reflect)匹配。此外,即使该字符串是 gsub! 的直接参数,"\1" 也不会被第一个捕获替换。您需要转义转义字符,如 "\\1"。为了让它工作,你需要给 gsub! 一个 block 。

但是与其这样做,不如尝试使用已经存在的东西。您应该使用字符串格式 %{} 并使用哈希符号。

request.user = "%{user} %{name}"
request.password = "%{password}"
parameters = {user: "first", name: "last", password: "secret"}
request.each do |value|
value.replace(value % parameters)
end

关于ruby - 使用正则表达式替换字符串中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34280437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com