ruby – 在每行上针对多个(15)正则表达式解析文本正文的最佳方法
我有一个我必须扫描的文本正文,每行包含至少2个,有时包含4个部分的信息.问题是每行可以是15-20个不同动作中的1个.
在ruby中,当前代码看起来有点像这样: text.split("n").each do |line| #around 20 times.. .............. expressions['actions'].each do |pat,reg| #around 20 times ................. 这显然是“问题”. 现在我将它们与正则表达式匹配 – 但这是无法忍受的缓慢.我从ruby开始跳到C,希望我能得到一个速度提升而且它不会发生. 我随便读了关于PEG和基于语法的解析但看起来有点难以实现.这是我应该走的方向还是有不同的路线? 基本上我正在解析扑克手牌历史,手牌历史的每一行通常都包含我需要收集的2-3位信息: 需要解析的示例文本: buriedtens posts $5 The button is in seat #4 *** HOLE CARDS *** Dealt to Mayhem 31337 [8s Ad] Sherwin7 folds OneMiKeee folds syhg99 calls $5 buriedtens raises to $10 收集此信息后,每个操作都会转换为xml节点. 现在我的ruby实现比我的更快,但这是可能的.只是因为我没有用c代码写了超过4 – 5年 更新: 588 hands/second -- boost::spirit in c++ 60 hands/second -- 1 very long and complicated regex in c++ (all the regexen put together) 33 hands/second -- normal regex style in ruby 我正在测试antlr,看看我们是否可以继续进行,但截至目前我对精神的结果非常满意. 相关问题:Efficiently querying one string against multiple regexes. 解决方法
我会建议
> Boost Spirit或 祝好运 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |