交换两个部分的文件名或句子分隔 -

时间:2014-01-19 17:52:58

标签: regex text text-manipulation

我有一整套书籍的格式为

A Knight dogs of the Word - Terry Brooks.epub

Enders Game - Orson Scott Card.epub

我希望将它们换成表格

Author's name - Book name.epub

我查看了网站,发现了这个:

^(.*)\s+(\w+\s+\w+)$

接下来是:

$2 : $1

(我发现\ 2 - \ 1产生了我想要的一些书的结果,但也带有尾随 - 。

然而,任何具有不同结构名称的书,如Orson Scott Card也会留下名字,如果有两个人用&编写了这本书,这真的很奇怪。他们之间。

2 个答案:

答案 0 :(得分:2)

让我做几个假设:

  1. 名称的第一部分不能包含“ - ”
  2. 所有文件以“.epub”
  3. 结尾

    在这种情况下,您可以替换:

    ^(.*?)\s*-\s*(.*?)\.epub$
    

    使用“$2 - $1。epub”。

    这是Java中的概念证明(忽略双反斜杠 - 这只是Java语法):

    public static void main(String[] args) throws Exception {
        final String[] testData = {"A Knight dogs of the Word - Terry Brooks.epub", "Enders Game - Orson Scott Card.epub"};
        final Pattern patt = Pattern.compile("^(.*?)\\s*-\\s*(.*?)\\.epub$");
        for(final String s : testData) {
            final Matcher m = patt.matcher(s);
            if(m.matches()) {
                System.out.println(m.group(2) + " - "+ m.group(1) + ".epub");
            }
        }
    }
    

    输出:

    Terry Brooks - A Knight dogs of the Word.epub
    Orson Scott Card - Enders Game.epub
    

    正如其他人所指出的那样,正则表达不一定是适合这项工作的正确工具,这是一个大锤核桃问题。在UNIX实用程序上有很多可以轻松实现这一点,例如:

    1. mmv
    2. plain bash

答案 1 :(得分:1)

正则表达式不适合这项工作。使用Vladimir Lanin的ren,如

ren '* - *.epub' '#2 - #1.epub'

我听说mmv的继承者ren也很有用。