如何用ruby解析这些书名?

时间:2013-01-27 06:29:53

标签: ruby regex parsing

我希望红宝石能够阅读目前看起来像这样的书籍集中所有书籍的标题:

No.Starch.The.Book.of.Ruby.Jun.2011.mobi
No.Starch.The.Book.of.Ruby.Jun.2011.pdf
Oreilly.Graphics.and.Animation.on.iOS.Apr.2011.epub
Oreilly.Graphics.and.Animation.on.iOS.Apr.2011.pdf
Packtpub.Core.Data.iOS.Essentials.Apr.2011.pdf
Pragmatic.iOS.Recipes.Jul.2011.epub

我想要做的第一件事就是解析出版商的名字。我从这里开始:http://rubular.com/r/muioQM1Gsq

但是我究竟如何解析多个发布者字符串?我真的是一个菜鸟 - 请帮忙吗?

1 个答案:

答案 0 :(得分:4)

这是我如何做的基本示例:

TITLE_HASH = {
  'No.Starch' => 'No_Starch'
}
TITLE_REGEX = /\b(?:#{ Regexp.union(TITLE_HASH.keys).source })\b/i

DATA.each do |fn|
  puts fn.gsub(TITLE_REGEX, TITLE_HASH).split('.').first.tr('_', ' ')
end

__END__
No.Starch.The.Book.of.Ruby.Jun.2011.mobi
No.Starch.The.Book.of.Ruby.Jun.2011.pdf
Oreilly.Graphics.and.Animation.on.iOS.Apr.2011.epub
Oreilly.Graphics.and.Animation.on.iOS.Apr.2011.pdf
Packtpub.Core.Data.iOS.Essentials.Apr.2011.pdf
Pragmatic.iOS.Recipes.Jul.2011.epub

运行时输出:

No Starch
No Starch
Oreilly
Oreilly
Packtpub
Pragmatic

使用发布商的模式维护TITLE_HASH,将带有“_”的分隔符.替换为任何超过一个字的名称。

此解决方案需要手动维护,但这是因为无法隔离发布者信息;有时它是第一个单词,有时是前两个单词,我相信可能会有更多单词。