删除非字母字符

时间:2015-06-11 22:51:20

标签: c#

删除C#中所有非字母字符的最佳方法是什么?我查了一下Regex,但是当我这么做时它似乎没有认出正则表达式:

string cleanString = "";
    string dirtyString = "I don't_8 really know what ! 6 non alpha- is?";
        cleanString = Regex.Replace(dirtyString, "[^A-Za-z0-9]", "");

正则表达式下面有一条红色的摇摆线。有没有办法可以删除简单的非字母字母,如果有的话,有些人可以提供样本吗?我不确定循环和数组是否可行,以及如何获取所有非字母字符?我假设我必须要做的事情,如果不等于A-Z或0-9,然后用“”删除?

2 个答案:

答案 0 :(得分:9)

您可以使用LINQ这样做:

var cleanString = new string(dirtyString.Where(Char.IsLetter).ToArray());

您可以查看MSDN上的其他字符检查。

答案 1 :(得分:2)

  

正则表达式下面带有一条红色的摇摆线。

然后:

  1. 编译预测无法正常工作(有时会出错)。
  2. 您在代码中没有using System.Text.RegularExpressions,因此当您说System.Text.RegularExpressions.Regex时,Regex无法解决问题。
  3. 回到原来的问题:

      

    在C#中删除所有非字母字符的最佳方法是什么?

    您采用的方法适用于小字符串,但[^A-Za-z0-9]将删除非字母数字和[^A-Za-z]非字母字符。这假设您已经被限制(或想要添加限制)US-ASCII字符。要包含áœßδ等字母,因为您处理的是真实的字而不是计算机代码,我会使用@"\P{L}"@"[^\p{L}\p{N}]"允许所有字母和数字。

    如果你正在处理非常大的文本(很多千字节),那么最好通过过滤流来阅读它,这样就可以去掉你不想要的字符。