针对特定字符串的C#正则表达式模式匹配

问题描述:

尝试执行正则表达式匹配并替换特定的模式以重命名文件。不幸的是,我使用正则表达式并不是很好,并希望能提供任何帮助。针对特定字符串的C#正则表达式模式匹配

我想要取代的模式是。

(Conflicted copy *) 

为了解释我需要更换(冲突副本*)基本上是相匹配的单词和右括号之间的话“(冲突副本”模式,任何一件事。

因此,例如,第一册(冲突副本这里一些垃圾).xls的 到:Book1.xls的

我会用什么正则表达式为要更换

我已经试过如下:?模式=“\([^ \(] * \)“;

不幸的是,它不工作,因为它们中有()的路径。

(即C:\一些废话\ 1(东西)\ BOOK1(冲突复制垃圾的东西)的.xls)

它会失败,并且文件重命名为:

(C:\一些废话\ 1. \ book1.xls) - >然后出错,因为该路径不存在。

任何帮助将不胜感激,谢谢你们。

+0

添加的 “冲突复制” 到正则表达式,因此只匹配 –

+0

@SamiKuhmonen - 感谢您的回复。我会,但我不知道在哪里添加它。再次不熟悉正则表达式。 – Valmorgal

+1

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

由于这是很容易得到的文件扩展名,你可以使用这个正则表达式只能提取文件名:

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

然后附加原始文件扩展名。

这可以避免使用积极向前的正则表达式组。

说明

[^\\]*匹配任何东西,但一个\(排除文件路径)

(?=\s\(Conflicted copy)后跟一个空格和(冲突复制

Demo

其他soluti使用组

以下正则表达式将提取文件名,而不是(冲突副本...)和文件扩展名:

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

第1组:文件名

组2:文件扩展名

Demo

+0

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

+0

@valmorgal是否有效? –