【问题标题】:Regular expression to match char ('-') from end of string then to the first char to the right (dot)正则表达式从字符串末尾匹配字符('-'),然后匹配右侧的第一个字符(点)
【发布时间】:2013-09-17 21:34:02
【问题描述】:

我正在使用重命名应用程序 (Filebot) 来整理我的媒体文件并使媒体中心/xbmc/plex 正常工作。

使用正则表达式匹配文件名中的“XXX”模式的最佳和最可靠的方法是:

aaa.bbb.*.fff-XXX.ext
aaa.bbb.*.fff-XXX.ext1.ext2

我设法解决了其他问题,但这对我来说似乎是一个无法克服的问题。 (还在学习中。)

【问题讨论】:

    标签: regex string filenames


    【解决方案1】:

    正则表达式:

    -([^-.]+)
    

    将XXX 放入捕获组 1。

    【讨论】:

    • 这行得通,谢谢!但事实证明,最后一个点(扩展名)没有被考虑在内,所以在我的情况下,它实际上应该匹配第一个点或字符串结尾 aaa.bbb.*.fff-XXX aaa.bbb.*.fff -XXX.ext1
    • \. 不是必需的,我已将其删除。捕获组只匹配任何非点序列,因此它将停止在点或字符串的末尾。
    【解决方案2】:

    这样的事情应该可以工作:

    -(.*?)\.
    

    这将匹配一个连字符,后跟零个或多个任意字符,非贪婪,在组 1 中捕获,然后是句点。

    另一种选择是使用环视断言,如下所示:

    (?<=-).*?(?=\.)
    

    这将匹配相同类型的文本,除了整个匹配将由- 和. 之间的子字符串组成,而不是在一个组中捕获它。

    【讨论】:

    • 我尝试了这些,但没有一个在我正在使用的应用程序中的正则表达式引擎中工作。我收到“意外令牌:?”错误。它们是扩展正则表达式吗?
    • @user2789319 第二个使用lookarounds,一些引擎不支持(例如JavaScript支持lookahead但不支持lookbehind)。然而,这些并没有什么特别之处。你用的是什么正则表达式引擎?
    • 我不能说它是哪个引擎,但该应用程序是 Filebot renamer。
    • 好吧,我现在看到 Filebot 包含了 Groovy 语言。
    猜你喜欢
    • 2017-09-30
    • 2019-12-18
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多