0

我有一整套格式的书

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)也会留下名字,如果两个人在他们之间用 & 写这本书,那就太奇怪了。

4

2 回答 2

2

让我做几个假设:

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

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

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

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

这是 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. 普通的 bash
于 2014-01-19T18:09:24.067 回答
1

正则表达式不是这项工作的正确工具。使用 Vladimir Lanin's ren,如

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

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

于 2014-01-19T17:58:14.987 回答