2017-05-14 60 views
1

嘗試執行正則表達式匹配並替換特定的模式以重命名文件。不幸的是,我使用正則表達式並不是很好,並希望能提供任何幫助。針對特定字符串的C#正則表達式模式匹配

我想要取代的模式是。

(Conflicted copy *) 

爲了解釋我需要更換(衝突副本*)基本上是相匹配的單詞和右括號之間的話「(衝突副本」模式,任何一件事。

因此,例如,第一冊(衝突副本這裏一些垃圾).xls的 到:Book1.xls的

我會用什麼正則表達式爲要更換

我已經試過如下:?模式=「\([^ \(] * \)「;

不幸的是,它不工作,因爲它們中有()的路徑。

(即C:\一些廢話\ 1(東西)\ BOOK1(衝突複製垃圾的東西)的.xls)

它會失敗,並且文件重命名爲:

(C:\一些廢話\ 1. \ book1.xls) - >然後出錯,因爲該路徑不存在。

任何幫助將不勝感激,謝謝你們。

+0

添加的 「衝突複製」 到正則表達式,因此只匹配 –

+0

@SamiKuhmonen - 感謝您的回覆。我會,但我不知道在哪裏添加它。再次不熟悉正則表達式。 – Valmorgal

+1

'\(衝突的副本[^)] * \)'可能會工作。 –

回答

2

由於這是很容易得到的文件擴展名,你可以使用這個正則表達式只能提取文件名:

[^\\]*(?=\s\(Conflicted copy)

然後附加原始文件擴展名。

這可以避免使用積極向前的正則表達式組。

說明

[^\\]*匹配任何東西,但一個\(排除文件路徑)

(?=\s\(Conflicted copy)後跟一個空格和(衝突複製

Demo

其他soluti使用組

以下正則表達式將提取文件名,而不是(衝突副本...)和文件擴展名:

([^\\]*)(?=\s\(Conflicted copy).*?\)(\..*)$

第1組:文件名

組2:文件擴展名

Demo

+0

已排除文件路徑的更新答案 –

+0

@valmorgal是否有效? –