正则表达式以提取字符串中的增量数

时间:2013-01-02 03:32:40

标签: regex

我正在使用多文件重命名工具,可以根据正则表达式模式重命名文件名。例如,我有这样的文件名:

Otrazenie.(01.serija.iz.12).2011.XviD.SATRip.RiperAM.avi
Otrazenie.(02.serija.iz.12).2011.XviD.SATRip.RiperAM.avi
Otrazenie.(03.serija.iz.12).2011.XviD.SATRip.RiperAM.avi

或者喜欢这些:

Beauty.and.the.Beast.S01E01.LostFilm.TV.avi
Beauty.and.the.Beast.S01E02.LostFilm.TV.avi
Beauty.and.the.Beast.S01E03.LostFilm.TV.avi

这里我们只有字符串里面的数字改变了(01,02,03 ...)

如何构建一个RegEx来从字符串中获取该数字?

1 个答案:

答案 0 :(得分:-1)

并不总是能够预测将基于单个文件更改的系列中的值。例如,想象从24电视剧的第2季中拉出剧集编号。文件名24_02_07.avi中有三个可能的系列值。在显示下一个文件名(24_02_08.avi)之前,不清楚哪个数字是系列值。

考虑到这一点,您可以运行以下bash脚本。它首先在当前目录的文件中找到最长的公共前缀。然后它会在每个文件名中找到前缀后面的数字:

set -- *
files=$#

prefix=$1
while [ -n "$prefix" ]; do
  set -- $prefix*
  [ $# -eq $files ] && break
  prefix=${prefix%?}
done

ls | sed -e "s/$prefix\([0-9]*\).*/\1/g" | sort -nu

我假设因为没有提到的语言,我们在命令行上。

使用Chris F.A. Johnsonfinding the longest common substring among filenames解决方案找到前缀。

相关问题