我正在尝试使用ruby解析HTML字符串,该字符串包含多个<pre></pre>
标签,我需要查找和编码每个标签之间的所有<
和>
括号元素。
Example:
string_1_pre = "<pre><h1>Welcome</h1></pre>"
string_2_pre = "<pre><h1>Welcome</h1></pre><pre><h1>Goodbye</h1></pre>"
def clean_pre_code(html_string)
matched = html_string.match(/(?<=<pre>).*(?=<\/pre>)/)
cleaned = matched.to_s.gsub(/[<]/, "<").gsub(/[>]/, ">")
html_string.gsub(/(?<=<pre>).*(?=<\/pre>)/, cleaned)
end
clean_pre_code(string_1_pre) #=> "<pre><h1>Welcome</h1></pre>"
clean_pre_code(string_2_pre) #=> "<pre><h1>Welcome</h1></pre><pre><h1>Goodbye</h1></pre>"
只要html_string
仅包含一个<pre></pre>
元素,则此方法有效,但是如果存在多个元素,则无效。
我愿意接受使用Nokogiri或类似产品的解决方案,但无法弄清楚如何使其按我的意愿做。
请让我知道是否需要其他上下文。
更新: 仅适用于Nokogiri,请参见已接受的答案。
答案 0 :(得分:1)
@ zstrad44是的,您可以使用Nokogiri完成它。这是我从您的版本开发的我的代码版本,这将为您提供字符串中多个pre
标记所需的结果。
def clean_pre_code(html_string)
doc = Nokogiri::HTML(html_string)
all_pre = doc.xpath('//pre')
res = ""
all_pre.each do |pre|
pre = pre.to_html
matched = pre.match(/(?<=<pre>).*(?=<\/pre>)/)
cleaned = matched.to_s.gsub(/[<]/, "<").gsub(/[>]/, ">")
res += pre.gsub(/(?<=<pre>).*(?=<\/pre>)/, cleaned)
end
res
end
我建议您阅读Nokogiri Cheatsheet,以更好地理解代码中使用的方法。编码愉快!希望我能帮助