【问题标题】:Ruby list of tags to a fluent regex流利的正则表达式的 Ruby 标记列表
【发布时间】:2010-11-24 23:54:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您是否考虑过使用合适的 xml/html 解析器(例如 nokogiri nokogiri.org)?
  • 好吧,一个合适的 xml/html 解析器是一个更健壮的解决方案,但我想要“只是文本”,愿意容忍有点嘈杂的结果,以换取不必映射确切的结构文件。

标签: ruby regex arrays fluent


【解决方案1】:

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

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

但是,您必须对其进行改进以支持带有属性的标签(例如),目前只删除简单的标签(例如

【讨论】:

  • 这将天真地改进它: /]*>/ -- 如果任何属性值包含' >'
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2022-07-22
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2012-10-17
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多