当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用正则表达式替换字符串中的参数》经验,为你挑选了1个好方法。

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

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.

谁能协助解决这个问题?



1> sawa..:

你的任何尝试都不会起作用,因为gsub!在调用之前会对参数进行评估gsub!.parameters[...]将在更换前进行评估,因此无法反映匹配.另外,"\1"即使该字符串是直接参数,也不会被第一次捕获所取代gsub!.你需要逃避转义字符,如"\\1".为了使它工作,你需要给一个块gsub!.

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

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

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有