如何用ruby解析这些书名?

如何用ruby解析这些书名?,ruby,regex,parsing,Ruby,Regex,Parsing,我希望ruby阅读我的图书收藏中所有书籍的标题,这些书籍目前看起来如下: 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.Essent

我希望ruby阅读我的图书收藏中所有书籍的标题,这些书籍目前看起来如下:

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
我要做的第一件事是解析出发布者的名称。我从这里开始:


但如何准确解析多个发布者字符串?我在这方面很在行,真的-有人能帮我吗?

这是我如何做到这一点的一个基本例子:

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\u散列
,对于长度超过一个单词的任何名称,将划界
替换为“\u”


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

为什么要把这个标记下来?我做错了什么?@AmitErandole除非每次匹配时都对每个出版商和书名进行硬编码,当前状态下的数据组织不正确。很难区分出版商名称和图书名称。如果出版商名称和图书名称之间用空格或其他字符分隔,则适合使用
regex
。当前状态下的数据无法用regex解析。归咎于data..@AmitErandole,该网站是关于编程的,因此您的应用程序域问题部分脱离主题。你需要尝试一些东西,把你的问题提炼成一个实际的编程问题。举个例子,“我怎样才能赚更多的钱?”这个问题可以说是相当合理的,也许对几乎所有人来说都极其重要。但是,对于这个网站来说,这是离题的。在这里提问的一个安全方法是:我有这个(提供示例)输入,我想要这个(示例)输出,我已经尝试过这个(示例代码)。不要在其他网站上放置代码或正则表达式,并期望人们帮助你。我们利用业余时间免费工作,而跳到其他地点则浪费了时间。而且,如果链接断开,你的问题就变得毫无价值了。输入足够的内容来演示问题,不再重复。提供足够的数据,以显示您预期会遇到的各种情况。请描述问题,以便我们了解排除某些类型答案的任何特殊情况。实用性似乎是标题的一部分,文件名在此处似乎没有标题。一般来说,最好保留一组发布者,然后从名称中选择发布者(如果有),然后选择日期。剩下的是书名。务实是出版公司的名称。我使用一个单独的散列来包含
“publisher.name”=>“publisher\u name”
映射的一个原因是为了更易于维护。该散列可以移动到YAML文件中,这样就可以轻松地进行更新,而不会弄乱代码。YAML是一种非常易于阅读的格式,非常适合用于初始化程序的数据文件。如果只有8-10个,这不是什么大问题,但对于其他目的来说,它可能很重要。”
源方法到底是什么?
“查找。