Ruby正则表达式帮助替换子字符串

Ruby正则表达式帮助替换子字符串,ruby,regex,Ruby,Regex,我需要将字段替换为\u替换 ...<div>\r\n<span field=\"field_to_replace\">\r\n<div>.... …\r\n\r\n。。。。 字符串中多次出现要替换的字段。我只需要使用前后的标记替换此事件。简单的方法是: str = "...<div>\r\n<span field=\"field_to_replace\">\r\n<span field=\"field_to_replace\"

我需要将
字段替换为\u替换

...<div>\r\n<span field=\"field_to_replace\">\r\n<div>....
…\r\n\r\n。。。。

字符串中多次出现要替换的
字段。我只需要使用前后的标记替换此事件。

简单的方法是:

str = "...<div>\r\n<span field=\"field_to_replace\">\r\n<span field=\"field_to_replace\">\r\n<div>...."
str.split("field_to_replace").join("new_field")
str=“…\r\n\r\n\r\n…”
str.split(“字段替换”)。join(“新字段”)

如果您需要更复杂的内容,请告诉我们。

除非保证源布局不会更改,否则不要使用正则表达式来尝试搜索或替换HTML或XML内部。使用解析器进行更改非常容易,而且它们可以轻松地处理对源代码的更改

这将替换HTML中出现的所有字符串:

require 'nokogiri'
doc = Nokogiri::HTML::DocumentFragment.parse("<div><span field='field_to_replace'><div>")
doc.to_html # => "<div><span field=\"field_to_replace\"><div></div></span></div>"

doc.search('div span[@field]').each do |span|
  span['field'] = 'foo'
end
doc.to_html # => "<div><span field=\"foo\"><div></div></span></div>"

通过定义CSS选择器,您可以快速轻松地识别节点。而且,如果您需要更多功能,那么可以使用XPath代替CSS。

同意,str.gsub('field\u to\u replace','new\u field')。我试图使用更容易被人知道的方法,但你的解决方案更好。哦,天哪,这个问题又来了。好的,不要为此使用正则表达式,因为它非常脆弱,很可能会损坏,特别是如果您没有HTML生成器的话。唯一需要考虑的是非常简单的HTML/XML。相反Ruby最常用的是。互联网和堆栈溢出上有很多例子解释了如何做到这一点。好的,谢谢@theTinMan
doc = Nokogiri::HTML::DocumentFragment.parse("<div><span field=\"field_to_replace\"><div><span field='field_to_replace'></span></div></span></div>")
doc.to_html # => "<div><span field=\"field_to_replace\"><div><span field=\"field_to_replace\"></span></div></span></div>"

doc.at('div span[@field]')['field'] = 'foo'
doc.to_html # => "<div><span field=\"foo\"><div><span field=\"field_to_replace\"></span></div></span></div>"