ruby - 如何使用 Ruby 替换字符串中每次出现的模式?

标签 ruby string replace

我有一个太大的 XML 文件。为了使其更小,我想用同一事物的较短版本替换所有标签和属性名称。

所以,我实现了这个:

string.gsub!(/<(\w+) /) do |match|
    case match
    when 'Image' then 'Img'
    when 'Text'  then 'Txt'
    end
end

puts string

它会删除所有开始标签,但不会做太多其他事情。

我在这里做错了什么?

最佳答案

另一种方式:

class String
  def minimize_tags!
    {"image" => "img", "text" => "txt"}.each do |from,to|
      gsub!(/<#{from}\b/i,"<#{to}")
      gsub!(/<\/#{from}>/i,"<\/#{to}>")
    end
    self
  end
end

这可能更容易维护,因为替换模式都在一个地方。在任何重要尺寸的字符串上,它可能比凯文的方法快得多。我使用这个 stackoverflow 页面本身的 HTML 源代码作为测试字符串对这两种方法进行了快速测试,我的方法大约快了 6 倍......

关于ruby - 如何使用 Ruby 替换字符串中每次出现的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4449692/

相关文章:

ruby - 为什么 sqrt() 不是 Numeric 上的方法?

c++ - 重载 boolean/字符串歧义

javascript - 数组中的元素不改变值

jquery:查找并循环div内具有特定ID的所有跨度?

mysql - 使用 Sequel 迁移重命名索引

ruby - Rails 3 的 RGB 颜色选择器

ruby-on-rails - 如何在 ActiveRecord 中设置 has_one 默认值?

javascript - 从长字符串中过滤数据(vcard)

linux - 如何在 ubuntu 上使用 shell 替换这个字符串

java - 将用户输入转换为乱七八糟的布偶谈话