2014-01-12 57 views
0

我正在使用RegexRenamer爲了使用正則表達式匹配替換重命名一些文件;搜索並替換模式 - 正則表達式模式

不幸的是,本教程沒有涵蓋任何接近我想要做的事情,也不太瞭解正則表達式的工作原理。 我基本上想要做的是用以下模式重命名一些文件。

藝術家,名 - 歌曲名

傑克遜,邁克爾 - 我們是世界

最終的結果應該是:

邁克爾·傑克遜 - 我們是世界。

我對這條規則的特色歌曲有一些例外情況,但第一個例子的代碼肯定會讓我一整天都在Google上搜索。

例外:

傑克遜,邁克爾&阿肯 - 握住我的手

應該

邁克爾·傑克遜&阿肯 - 牽我的手

+0

至少教程應該告訴你一些關於捕獲組和索引嗎?您可以捕獲由正則表達式匹配的文本,並在替換中引用它們。 – nhahtdh

回答

0

正則表達式:

(\w+),\s+(\w+) 

隨着替換:

$2 $1 

Live demo #1

對於多次出現:

(?:(\w+),\s+(\w+))+ 

Live demo #2

如果歌曲的名字可能也逗號它,,然後使用此:

(\w+),\s+(\w+)(?=.*?-) 
+0

更短,更好。 – valiD

+0

@ValentinDragan,並添加了另一個正則表達式以避免衝突 – revo

+0

如果碰巧有兩個名字 - 就像'傑克遜,邁克爾安德魯'一樣,這只是不起作用。 – brandonscript

0

正則表達式是困難的,特別是如果你是新的。嘗試了這一點:

Find: "([a-zA-Z]+), ([a-zA-Z]+)([a-zA-Z& ]*) \\- ([a-zA-Z ]+)\n" 
     /\ group 1. /\ group 2. /\ 3.    /\ 4 
Replace: "$2 $1 $3 - $4" 

注意,一些正則表達式字符需要進行轉義,我逃出他們用雙反斜線,你會在大多數編程語言做。如果您只需要一個反斜槓,請使用單個反斜槓,但請注意,您將需要用換行符替換\ n。

基本上這樣做是匹配兩個逗號分隔的字母詞,分組在$ 1和$ 2。 [a-zA-Z]+表示匹配一個或多個字母字符。括號使它捕獲任何匹配,所以我們可以在稍後進行替換。它交換了這些名字。然後它在$ 3的短劃線之前捕獲任何額外的東西並追加。這就像組1和組2,除了它還包含&字符和空格,它具有*而不是+,所以它匹配0個或更多個字符。 (額外的部分可能會或可能不會在那裏)。最後,它以$ 4捕獲歌曲名稱並追加。我認爲所有歌曲名稱只包含字母字符和空格。如果您的歌曲名稱包含其他任何內容,則需要將其添加進去。

免責聲明:此正則表達式未經測試,可能包含錯誤。