更快的文本替换

时间:2014-08-10 14:37:14

标签: ruby

我编写了一个方法来纠正Bahnstra\s39e之类的字词,并将\s39等特殊字符替换为00DF数组中关联的unicodes @fields

@fields = {"s39" => "00DF", ...}

@fields数组包含大约50个特殊字符,我注意到由于我的correct(word)方法,我的代码非常蹩脚!我可以改变什么才能让它更快地运作?谢谢

def correct(word)
  @fields.each do |key, array|
    word.gsub! "\\" + key , [array.hex].pack("U")
  end
  return word.gsub(/\\u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}
end

1 个答案:

答案 0 :(得分:1)

String#gsub方法有一个Hash作为替换的表单,因此它完全符合您的需求。

@fields = { '\s39' => 'ß', … }
word.gsub(/\\s?d+/, @fields)

更新:通过评论中OP的规范

,在正则表达式中使's'字符可选