使用RegEx替换无效字符

yea*_*mok 25 c# regex

我有一个包含大量文件夹,子文件夹和所有文件的目录.我的项目的想法是递归整个目录,收集文件的所有名称并替换无效字符(对于SharePoint迁移无效).

但是,我对正则表达式完全不熟悉.我需要在文件名中摆脱的字符是: ~, #, %, &, *, { } , \, /, :, <>, ?, -, |"" 我想用一个空格来代替这些字符.我希望使用一种string.replace()方法来查看所有这些文件名并进行替换.

到目前为止,我得到的唯一代码是递归.我正在考虑递归扫描驱动器,获取这些文件的名称并将它们放入List<string>.

任何人都可以帮助我如何使用RegEx查找/替换无效字符与这些特定字符?

Viv*_*ath 49

string pattern = "[\\~#%&*{}/:<>?|\"-]";
string replacement = " ";

Regex regEx = new Regex(pattern);
string sanitized = Regex.Replace(regEx.Replace(input, replacement), @"\s+", " ");
Run Code Online (Sandbox Code Playgroud)

这将用单个空格替换空白行.

  • `string pattern ="[\\〜#%&*{} /:<>?|" - ]";`更好 - 减少不必要的转义. (2认同)

Mic*_*ter 8

有没有办法摆脱多余的空间?

尝试这样的事情:

string pattern = " *[\\~#%&*{}/:<>?|\"-]+ *";
string replacement = " ";

Regex regEx = new Regex(pattern);
string sanitized = regEx.Replace(input, replacement);
Run Code Online (Sandbox Code Playgroud)

考虑自己学习一些关于正则表达式的知识,因为它在开发中也很有用(例如在Visual Studio中搜索/替换).