【问题标题】:Match , space and [A-z] with possible second comma RegEx使用可能的第二个逗号 RegEx 匹配 、空格和 [A-z]
【发布时间】:2016-10-01 22:53:42
【问题描述】:

我有文件名为

Author_1999.pdf
Authorone, Authortwo_1999.pdf
Authorone, Authortwo, Authorthree.pdf   
Arian, Nachmias, Amir_2002.pdf
Author, Review, Source_2015(2).pdf
Avraham, Hacohen_1930.pdf

由参考经理 Mendeley 制作。我需要它们的格式都是 Authorone1999.pdf 或 Authorone1999(2).pdf。我的正则表达式只匹配最后一个逗号空间作者和 _

/(, )+[A-z ]*,?[A-z]*,?-?[A-z]*_/

如何在可选的第一个逗号空格 Authortwo 上进行匹配。逗号永远不会超过两个,因为它产生了

Authorone, et al._1999.pdf

我已经把它们清理干净了。

【问题讨论】:

  • Authorone, Authortwo, Authorthree.pdf 甚至没有一年。如何处理?
  • 由于 [A-z] 末尾没有“_”要删除,我不希望它被匹配。只有少数这样的,我将不得不手工完成。仅匹配结束年份 files = Dir['*'].select {|x| x =~ /d*.pdf/} 的文件
  • 不要使用正则表达式,使用rubular来测试Ruby正则表达式。

标签: ruby regex rename


【解决方案1】:

这是一个简单的解决方案:

/^(?<author>[a-z-]+).*_(?<year>[\d()]+)/i

Demo

这会将authoryear 存储到两个命名的捕获组中。

【讨论】:

  • 作者名中的- 怎么样?并且多个作者用逗号分隔?
  • 啊,我错过了连字符,抱歉 - 示例文本中没有连字符(但图像中有)。这很容易修复——已编辑。
  • 至于多位作者,老实说,我不清楚 OP 到底想要什么。 Arian, Nachmias, Amir_2002.pdf 是否应该转换为 ArianNachmiasAmir2002.pdf?或者,三个名为Arian2002.pdfNachmias2002.pdfAmir2002.pdf 的文件?或者我们只是取第一作者的名字,就像我在这里所做的那样?给出的例子不清楚。
  • Tom 我只是在这个问题的逗号后面匹配。打算单独处理重命名。 Amir2002.pdf 是答案。
【解决方案2】:

怎么样:

/, +[A-Za-z-]+(?:, [A-Za-z-]+)?(?:, [A-Za-z-]+)?_/

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多