我正在将数以万计的文档从一种标记格式(显然是 RUNOFF 的一些后代,我有最少的文档)转换成我可以提供给 LaTeX 的东西。此过程的一部分涉及在每个文档中搜索在旧标记格式中具有特殊含义的每个字符串,并将其替换为适合 LaTeX 的字符串。有数百个。到目前为止,我的两个想法是将每个都作为单独的 gsub 或使用将匹配(通过 ORing)许多符号的正则表达式制作 gsub,然后将匹配传递给带有大 case 语句的方法,该语句将通过返回适当的替换。从表面上看,第二种方法减少了必须扫描每个文档的次数,但正则表达式中 OR 的开销可能更昂贵。
以下是我描述的两种方式的示例。他们可能不完美。只是想表达我的意思。
方法一:
output.gsub!(/a<-"/, '\\"{a}') # ä
output.gsub!(/a<-^/, '\\^{a}') # â
output.gsub!(/a<-~/, '\\~{a}') # ã
...etc
方法二:
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