如何从字符串中删除多个有问题的字符?

pha*_*han 4 c# string

这是我的工作代码:

string Input;
string Output;

Input = data;
Output = Input.Replace(@")", "");
Run Code Online (Sandbox Code Playgroud)

在这里,我只是从我的字符串中删除括号")",如果它存在的话.现在我如何扩展像")"这样的违规字符列表,以包括"("和" - "?

我意识到我可以写两个类似输出的语句,但我想知道是否有更好的方法......

Ben*_*igt 12

LINQ解决方案:

Output = new String(Input.Except("()-").ToArray());
Run Code Online (Sandbox Code Playgroud)

  • ``Except'返回一组不同的字符,因此输出不正确(例如``Test`将变为`Tes`),你可以在[MSDN]上查看这个(https://msdn.microsoft.com/en-我们/库/ vstudio/bb300779.aspx). (9认同)
  • @罗纳德:您是正确的,重复将被删除...但是,该行为没有记录在案。我不得不看一下`ExceptIterator`的实现。 (2认同)
  • @BenVoigt对于我的示例,您是对的,字母大小写确实很重要,因此:`test`将变为`tes`。MSDN文档确实并不明确,只有.NET Framework 4的社区添加(注释)在编写本文时显示了这一点。 (2认同)

小智 10

如果你只是做了几次替换(我看到你只做了三次),最简单的方法就是将三个Replace调用链接到一个语句中而不用担心Regex或StringBuilders:

Output = Input.Replace("(", "").Replace(")", "").Replace("-", "");
Run Code Online (Sandbox Code Playgroud)

...这比每次将结果存储在输出中要好一些.


Joe*_*orn 8

Output = Regex.Replace(Input, "[()-]", "");
Run Code Online (Sandbox Code Playgroud)

[]表达式中的字符来创建字符类.它与这些字符不直接匹配.