Ruby 如何使用正则表达式在文本之间插入文本?

Ruby 如何使用正则表达式在文本之间插入文本?,ruby,xml,regex,watir,watir-webdriver,Ruby,Xml,Regex,Watir,Watir Webdriver,我有一个独特的场景。有一个web应用程序,它是一个模拟器,用于检查XML中数据的发送,并获取XML中的数据,以及验证XML中的一些细节 现在我发送的xml数据有很多细节。在xml中,我必须插入一个在测试中定义的参数。我无法获得,如何在发送数据之前将数据作为xml中的参数发送 xml结构如下所示 id='12345'><version>1.3.4<</version><accno>1234567890</accno>add<addr

我有一个独特的场景。有一个web应用程序,它是一个模拟器,用于检查XML中数据的发送,并获取XML中的数据,以及验证XML中的一些细节

现在我发送的xml数据有很多细节。在xml中,我必须插入一个在测试中定义的参数。我无法获得,如何在发送数据之前将数据作为xml中的参数发送

xml结构如下所示

id='12345'><version>1.3.4<</version><accno>1234567890</accno>add<address details</> ..........
现在在这个xml结构中,我已经参数化了1234567890。。。意思是在脚本的开头我声明accno='1234567890'


现在我想在xml中使用accno作为参数,而不是在xml中使用硬编码的值。请建议如何执行此操作。

首先确定模式,然后使用gsub替换它

xml_data.gsub! (pattern, replacement)

首先确定模式,然后使用gsub替换它

xml_data.gsub! (pattern, replacement)

我会说,用正则表达式编辑xml是个坏主意

但为了回答直接的问题,请使用gsub。例如

str.gsub(/reg_match/, newstring)
但更好的方法是使用

或者也可以使用ruby模板

require 'erb'
require 'ostruct'

data = {:accno => "1234567890"}
variables = OpenStruct.new(data)

template = "<id='12345'><version>1.3.4</version><accno><%= accno%></accno>"

res = ERB.new(template).result(variables.instance_eval { binding })
puts res

我会说,用正则表达式编辑xml是个坏主意

但为了回答直接的问题,请使用gsub。例如

str.gsub(/reg_match/, newstring)
但更好的方法是使用

或者也可以使用ruby模板

require 'erb'
require 'ostruct'

data = {:accno => "1234567890"}
variables = OpenStruct.new(data)

template = "<id='12345'><version>1.3.4</version><accno><%= accno%></accno>"

res = ERB.new(template).result(variables.instance_eval { binding })
puts res

正如拉吉卡兰所说,最快的方法是使用gsub。正确的方法是使用xml或其他xml库。投资应该与你将来使用这种东西的数量有关。

最快的方法是像拉吉卡兰说的那样使用gsub。正确的方法是使用xml或其他xml库。投资应该与您将来使用这种东西的数量有关。

XML不是常规的,而是与上下文无关的。使用合适的解析器,比如Nokogiri,而不是regex。看


作为回答,按要求。

XML不是规则的,而是上下文无关的。使用合适的解析器,比如Nokogiri,而不是regex。看


作为回答,按要求。

我收到一个错误。。。语法错误,意外的tINTEGER,应为$end…..并且它指出了值之间的位置..也就是说,它看起来无法读取。好吧,我删除了。。。就像我只通过了id=12345,现在我没有得到错误。。。但是代码仍然在var模板的字符串中使用了justuse,而不是or。我能够准确地替换XML中的文本。感谢您快速正确的回复。解决方法很难…我得到一个错误。。。语法错误,意外的tINTEGER,应为$end…..并且它指出了值之间的位置..也就是说,它看起来无法读取。好吧,我删除了。。。就像我只通过了id=12345,现在我没有得到错误。。。但是代码仍然在var模板的字符串中使用了justuse,而不是or。我能够准确地替换XML中的文本。感谢您快速正确的回复。XML不是常规的,而是上下文无关的。使用合适的解析器,比如Nokogiri,而不是regex。见@Tass-你应该回答这个问题,而不是评论这个问题。IMHO,你的评论是到目前为止最好的答案。我不明白为什么这被标记为Watir和Watir webdriver。您是否在测试web api级别的内容?或者你打算驱动一个web应用程序并验证UI中显示的内容?或者从UI中提取数据,并在解析后进一步处理它,等等?我不清楚你想用什么测试方法。只有当您实际驾驶浏览器时,Watir才适用。如果您只是调用REST API之类的东西,那么像gem一样的REST客户端可能更适合作为与服务器交互的方式。我使用Watir和Webdriver来驱动浏览器。我正在开发一个web应用程序,它更像是一个模拟器,用于测试xml的发送和接收xml本身的响应。它是一个有限域应用程序,其中模拟器web应用程序执行一些交易,模拟用户使用internet进行电子商务交易时发生的情况,例如使用信用卡在易趣上购买某些东西。XML不是常规的,但与上下文无关。使用合适的解析器,比如Nokogiri,而不是regex。见@Tass-你应该回答这个问题,而不是评论这个问题。IMHO,你的评论是到目前为止最好的答案。我不明白为什么这被标记为Watir和Watir webdriver。您是否在测试web api级别的内容?或者你打算驱动一个web应用程序并验证UI中显示的内容?或者从UI中提取数据,并在解析后进一步处理它,等等?我不清楚你想用什么测试方法。只有当您实际驾驶浏览器时,Watir才适用。如果您只是调用REST API之类的东西,那么像gem一样的REST客户端可能更适合作为与服务器交互的方式。我使用Watir和Webdriver来驱动浏览器。我在w工作 eb应用程序更像是一个模拟器,用于测试xml的发送和接收xml本身的响应。它是一个金融领域应用程序,其中模拟器web应用程序进行一些交易,模拟用户使用互联网进行电子商务交易时发生的情况,例如使用信用卡在易趣上购买某些东西