私は何万ものドキュメントを 1 つのマークアップ形式 (どうやら RUNOFF の子孫で、ドキュメントが最小限しかない) から LaTeX にフィードできるものに変換しています。このプロセスの一部には、古いマークアップ形式で特別な意味を持つ各文字列を各ドキュメントで検索し、LaTeX の適切な文字列に置き換えることが含まれます。これらは何百もあります。これまでの私の 2 つの考えは、それぞれを個別の gsub として実行するか、(ORing によって) 多くのシンボルに一致する正規表現を使用して gsub を作成し、合格する大きな case ステートメントを使用して一致をメソッドに渡すことです。適切な置換を戻します。一見すると、2 番目の方法は各ドキュメントをスキャンする必要がある回数を減らしますが、正規表現内の OR のオーバーヘッドはよりコストがかかる可能性があります。
ここでは、私が説明した 2 つの方法の例を示します。それらは不完全かもしれません。私の主張を理解しようとしているだけです。
方法 1:
output.gsub!(/a<-"/, '\\"{a}') # ä
output.gsub!(/a<-^/, '\\^{a}') # â
output.gsub!(/a<-~/, '\\~{a}') # ã
...etc
方法 2:
output.gsub!(/a<-"|a<-^|a<-~|etc/) {|match| convert_symbol(match)}
def convert_symbol(input)
case match
when 'a<-"'
'\\"{a}' # ä
when "a<-^"
'\\^{a}' # â
when "a<-~"
'\\~{a}' # ã
when 'etc'
'\\LaTeX...etc'
end
end