Ruby - 使用正则表达式从字符串中去除所有 HTML 标签
Ruby - Strip all HTML tags from string with Regex
我以下面的字符串为例
"<p>Hello,</p><p><br></p><p>my name is Same</p><p><br></p><p><br></p><p>Farewell,</p><p>Same</p>"
我想从中删除所有 HTML 标签。我正在使用以下哪种方法有效
Nokogiri::HTML(CGI.unescapeHTML(@message_preview)).content
但最终还是产生了,
"Hello,my name is SameFarewell,Same"
当我想要的时候
"Hello, my name is Same Farewell, Same"
注意 spaces,给定一个换行符,我希望在它的位置有一个 space 而不是字符串中的下一个字符。
我本来希望尝试使用 gsub 或 regex,但对如何实现它有点迷茫。
不幸的是,当没有给出块时,Nokogiri::XML::Node#traverse
不会 return 枚举器,这就是为什么我们需要这个丑陋的 hack 来预先定义局部变量。
require 'nokogiri'
result, input = [], "<p>Hello,</p><p><br></p><p>my name is Same</p>" \
"<p><br></p><p><br></p><p>Farewell,</p><p>Same</p>"
Nokogiri::HTML(CGI.unescapeHTML(input)).traverse do |e|
result << e.text if e.text?
end
result.join(' ')
#⇒ "Hello, my name is Same Farewell, Same"
您可以在此处使用 split
传递适用于您的示例的正则表达式(s 是您的字符串)。
def wordy s
s.split(/\<.*?\>/)
.map(&:strip)
.reject(&:empty?)
.join(' ')
.gsub(/\s,/,',')
end
s = "<p>Hello,</p><p><br></p><p>my name is Same</p><p><br></p><p><br></p><p>Farewell,</p><p>Same</p>"
t = "<p>Hello <strong>Jim</strong>,</p><p> </p><p>This is <em>Charlie</em> and<u> I wanted to say</u></p><ol><li>hello</li><li>goodby</li></ol><p> </p><p>Farewell,</p><p>Lawrence</p>"
p wordy s
#"Hello, my name is Same Farewell, Same"
p wordy t
#"Hello Jim, This is Charlie and I wanted to say hello goodby Farewell, Lawrence"
我的决定:
description.gsub!(/<("[^"]*"|'[^']*'|[^'">])*>/, ' ').strip
我以下面的字符串为例
"<p>Hello,</p><p><br></p><p>my name is Same</p><p><br></p><p><br></p><p>Farewell,</p><p>Same</p>"
我想从中删除所有 HTML 标签。我正在使用以下哪种方法有效
Nokogiri::HTML(CGI.unescapeHTML(@message_preview)).content
但最终还是产生了,
"Hello,my name is SameFarewell,Same"
当我想要的时候
"Hello, my name is Same Farewell, Same"
注意 spaces,给定一个换行符,我希望在它的位置有一个 space 而不是字符串中的下一个字符。
我本来希望尝试使用 gsub 或 regex,但对如何实现它有点迷茫。
不幸的是,当没有给出块时,Nokogiri::XML::Node#traverse
不会 return 枚举器,这就是为什么我们需要这个丑陋的 hack 来预先定义局部变量。
require 'nokogiri'
result, input = [], "<p>Hello,</p><p><br></p><p>my name is Same</p>" \
"<p><br></p><p><br></p><p>Farewell,</p><p>Same</p>"
Nokogiri::HTML(CGI.unescapeHTML(input)).traverse do |e|
result << e.text if e.text?
end
result.join(' ')
#⇒ "Hello, my name is Same Farewell, Same"
您可以在此处使用 split
传递适用于您的示例的正则表达式(s 是您的字符串)。
def wordy s
s.split(/\<.*?\>/)
.map(&:strip)
.reject(&:empty?)
.join(' ')
.gsub(/\s,/,',')
end
s = "<p>Hello,</p><p><br></p><p>my name is Same</p><p><br></p><p><br></p><p>Farewell,</p><p>Same</p>"
t = "<p>Hello <strong>Jim</strong>,</p><p> </p><p>This is <em>Charlie</em> and<u> I wanted to say</u></p><ol><li>hello</li><li>goodby</li></ol><p> </p><p>Farewell,</p><p>Lawrence</p>"
p wordy s
#"Hello, my name is Same Farewell, Same"
p wordy t
#"Hello Jim, This is Charlie and I wanted to say hello goodby Farewell, Lawrence"
我的决定:
description.gsub!(/<("[^"]*"|'[^']*'|[^'">])*>/, ' ').strip