2

我想使用 Ruby 清理其标签的 HTML 页面。我有原始 HTML,并且想定义一个标签列表,例如 ['span'、'li'、'div'],并创建一个可以按顺序运行的正则表达式数组,这样我就有了

clean_text = raw.gsub(first_regex,' ').gsub(second_regex,' ')...

每个标签有两个正则表达式(开始和结束)。

我是否有办法以编程方式执行此操作(即从标记数组预先构建正则表达式数组,然后以流畅的模式运行它们)?

编辑:我意识到我实际上一次问了两个问题 - 第一个关于将标签列表转换为正则表达式列表,第二个关于调用正则表达式列表作为流利的。感谢您回答这两个问题。我将尝试使我的下一个问题成为单一主题。

4

2 回答 2

2

这应该会生成一个正则表达式来删除所有标签。

clean_text = raw.gsub(/<\/?(#{tags.join("|")})>/, '')

但是,您必须对其进行改进以支持带有属性的标签(例如 <a href="...">),目前仅删除了简单的标签(例如 <a>)

于 2009-09-02T15:29:23.137 回答
1

假设您有一种build_regex将标签转换为正则表达式的方法,应该这样做:

tags = %w(span div li)
clean_text = tags.inject(raw) {|text, tag| text.gsub build_regex(tag), ' ' }

注入调用将每次替换的结果传递到块的下一次迭代中,从而产生在字符串上逐个运行每个 gsub 的效果。

于 2009-09-02T15:23:50.293 回答