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 などの別の構造化された名前の本は、最初の名前も残しており、2 人の人がその本を & で区切って書いた場合、非常に奇妙になります。

4

2 に答える 2

2

いくつかの仮定を立てましょう。

  1. 名前の最初の部分に「-」を含めることはできません
  2. すべてのファイルは「.epub」で終わります

その場合、次のものを置き換えることができます:

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

$2-.epub $1」付き。

Java での概念実証を次に示します (2 つのバックスラッシュは無視してください。これは単なる 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. プレーンバッシュ
于 2014-01-19T18:09:24.067 に答える
1

正規表現は、この仕事に適したツールではありません。Vladimir Lanin の を使用renします。

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

mmvの後継機renである も重宝しているそうです。

于 2014-01-19T17:58:14.987 に答える