删除非字母字符

8
什么是在C#中删除所有非字母字符的最佳方法?我查了一下正则表达式,但它似乎不能识别正则表达式,当我这样做时:
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,则用""删除"这样的事情吗?


关于那个红色的波浪线,你是否添加了 using System.Text.RegularExpressions - Andrew Whitaker
1
代码产生了“Idont8reallyknowwhat6nonalphais”(这似乎是你的目标)。也许你有一些编译错误? - Alexei Levenkov
@AndrewWhitaker 我没有,之前从未使用过正则表达式,所以不知道我需要它。谢谢你。我可以看到Alexi是怎么做的了。现在我需要对其进行修改,以便保留空格并删除数字和非字母字符。 - Coder
1
cleanString = Regex.Replace(dirtyString, "[^a-zA-Z ' ']",""); 好的,谢谢大家。 - Coder
2个回答

17

您可以使用LINQ来完成它,方法如下:

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

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


2
正则表达式下有一条红色的波浪线。
可能是以下原因之一:
1. 编译预测没有正确工作(有时会出错)。 2. 代码中没有使用using System.Text.RegularExpressions,所以它无法确定你在说Regex时是否指的是System.Text.RegularExpressions.Regex
回到您最初的问题:
如何以最佳方式从C#中删除所有非字母字符?
对于小字符串,您采取的方法是不错的,尽管[^A-Za-z0-9]将删除非字母数字和[^A-Za-z]将删除非字母字符。这是假设您已经限制为(或想要添加限制为)US-ASCII字符集。如果要包括像áœßδ这样的字母,因为您正在处理真实单词而不是计算机代码,我建议使用@"\P{L}"@"[^\p{L}\p{N}]"来允许所有字母和数字。
如果您正在处理大量文本(几千字节),那么最好通过过滤流读取它,并在进行操作时去除不需要的字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接