正则表达式重新排列电子书文件名

时间:2014-09-11 23:07:58

标签: regex

我正在寻找重新排列电子书文件名的正则表达式,以便在File Renamer中使用。文件名在序列信息的前面有一个旧的库引用代码,它位于文件名末尾的方括号中。我需要删除代码并重新排列文件名,以便系列信息位于中间。例如:

"Author Name - Book Tile [HMED-584, Series info 02].txt"

需要成为:

Author Name - [Series info 02] - Book Title.txt

我之前使用此正则表达式删除了与系列信息分开的方括号中的旧库引用代码:

\[[A-Z]{1,4}-[0-9]{1,4}(, *[A-Z]{1,4}-[0-9]{1,4})?]

我对正则表达式相当新,所以还没有尝试过这些。

2 个答案:

答案 0 :(得分:2)

这个表达式:

(.*?)\s*-\s*(.*?)\s*\[(?:[A-Z]{1,4}-[0-9]{1,4},\s*)+([^\]]+)\]\.([a-z]+)

将捕获以下组:

  1. 作者姓名
  2. 书名
  3. 系列信息
  4. 文件扩展名
  5. 这样您就可以替换为:

    $1 - [$3] - $2.$4
    

    Demo


    我制作了作者姓名和书名懒惰点匹配所有捕获组。您可以将这些(.*?)替换为更具体的内容,例如[\w\s]+,但我认为这不值得。然后我匹配你的#34; 4 alpha" - " 4位"参考代码的模式,但将其丢弃在重复的非捕获组中。接下来是系列信息的任何非]字符(如果需要,您可以将其更改为另一个懒惰点匹配 - 全部)。最后,我捕获了文件扩展名。但如果匹配/替换始终为.txt,则此部分可以保留(或硬编码)。

答案 1 :(得分:0)

这可能有效

 # Find:    ([^-]+?)\s*-\s*([^\[]+?)\s*\[[^,]*?,\s*([^\]]+?)\s*\]
 # Replace: $1 - [$3] - $2

 ( [^-]+? )                    # (1), Name
 \s* 
 - 
 \s*                           
 ( [^\[]+? )                   # (2), Title
 \s* 
 \[
 [^,]*? 
 ,
 \s*                           
 (                             # (3 start), Series
      [^\]]+? 
 )                             # (3 end)
 \s* 
 \]