2014-01-19 44 views
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

注意的信息。在正則表達式標籤上說:*不同的語言有不同的正則表達式實現。因此,提出您希望使用正則表達式的語言是明智的。如果你對這門語言沒有特別的瞭解,那麼請提及它。*你用什麼工具/語言來做到這一點? –

+0

祝你好運與'樂Passe-muraille-馬塞爾Aymé.epub' –

回答

1

正則表達式不適合這份工作。使用弗拉基米爾·拉寧的ren,在

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

聽說mmv,繼任者ren,也是有益的。

+0

嗨。我不知道如何在我使用的軟件中實現mmv和ren; Filemenu Tools'Advanced Renamer或如何在我的電腦上實現它們。正如我所說,我剛剛開始使用RegEx,並且不清楚這些其他解決方案。 – user3212674

2

讓我做一些假設:

  1. 名稱的第一部分不能包含 「 - 」
  2. 所有文件結束與 「.epub」

在哪種情況下你可以更換:

^(.*?)\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
+0

嗨。我試過你的搜索和$ 2 - $ 2.epub和$ 2 - $ 1.epub。都沒有工作。由於我在Windows PC上使用'Filemenu Tools'Advanced Renamer,因此我不確定如何在此上下文中使用mmv或純bash。有三種類型的擴展名opf epub和jpg。 – user3212674

+0

@ user3212674請不要定義作品。它沒有找到這些文件嗎?它是否錯誤地重命名它們?如果有多個不同的擴展名,您需要將'\ .epub $'更改爲'\。(。*)$',並使用第三個匹配組來跟蹤擴展名。 –

+0

嗨鮑里斯。我認爲這個軟件並不複雜,並且不支持所有的RegEx。目前我正在測試一個文件。對於混淆抱歉;第二個$ 2 - $ 1應該讀取\ 2 - \ 1給這對沒有在替換行中工作的對。該軟件做了一些簡單的RegEx更改,但似乎更復雜。你能解釋一下(對於一個白癡!)你的線路是如何一步一步做的,我會測試每一點。如果你不介意,並有更多時間浪費在我的問題上。理查德 – user3212674

相關問題