【问题标题】:Using RegEx to replace invalid characters使用 RegEx 替换无效字符
【发布时间】:2010-06-09 19:38:14
【问题描述】:

我有一个目录,里面有很多文件夹、子文件夹和所有文件。我的项目的想法是遍历整个目录,收集文件的所有名称并替换无效字符(对于 SharePoint 迁移无效)。

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

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

谁能帮我用正则表达式查找/替换那些特定字符的无效字符?

【问题讨论】:

标签: c# regex


【解决方案1】:
string pattern = "[\\~#%&*{}/:<>?|\"-]";
string replacement = " ";

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

这也将用单个空格替换空白的运行。

【讨论】:

  • string pattern = "[\\~#%&amp;*{}/:&lt;&gt;?|"-]"; 更好 - 减少不必要的转义。
  • @Tim 谢谢!我将编辑我的解决方案。我的大部分正则表达式经验都是在 Perl 中使用正则表达式文字的。所以我不完全确定在 C# 或 Java 中哪些需要转义,哪些不需要转义。这主要是反复试验。
  • 我刚刚注意到yeahumok 想用空格而不是空字符串替换无效字符。我再次从我的版本中删除了+,希望他希望每个无效字符都有一个空格,即使连续有几个。
  • 有没有办法去掉多余的空格?例如:Deal A & B.txt 变为 Deal A B.txt(黑白字母中的 3 个空格)有没有办法修剪掉多余的空间,所以它看起来像: Deal A B.txt(1 个空格 b/w字母)?
  • 我注意到当我运行它时,它并没有重命名文件本身。也许是我不清楚是我的错……但是有什么办法可以更改实际的文件名本身吗??
【解决方案2】:

有没有办法去掉多余的空格?

试试这样的:

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

Regex regEx = new Regex(pattern);
string sanitized = regEx.Replace(input, replacement);

考虑自己学习a bit about regular expressions,因为它在开发中也非常有用(例如在 Visual Studio 中搜索/替换)。

【讨论】:

  • 另外,有没有办法删除任何无关的'。' (句点)在文件名中?例如:0.0.0.1.doc 如果不清除 .doc,我将如何处理?
猜你喜欢
  • 2014-04-19
  • 2012-06-22
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多