如何从string中去除非字母数字字符(包括空格)?

如何从string中去除非字母数字字符并在C#中用Replacereplace空格?

我想保持az,AZ,0-9,没有什么更多(甚至没有“空格”)。

"Hello there(hello#)".Replace(regex-i-want, ""); 

应该给

 "Hellotherehello" 

"Hello there(hello#)".Replace(@"[^A-Za-z0-9 ]", "");我试过了"Hello there(hello#)".Replace(@"[^A-Za-z0-9 ]", ""); 但空间仍然存在。

在你的正则expression式中,你已经排除了匹配的空格(你还没有使用过我完全忽略的Regex.Replace() ):

 result = Regex.Replace("Hello there(hello#)", @"[^A-Za-z0-9]+", ""); 

应该pipe用。 +通过一次匹配多个连续的非字母数字字符而不是一个一个来使正则expression式更有效。

如果您还想保留非ASCII字母/数字,请使用以下正则expression式:

 @"[^\p{L}\p{N}]+" 

离开

 BonjourmesélèvesGutenMorgenliebeSchüler 

代替

 BonjourmeslvesGutenMorgenliebeSchler 

您可以使用Linq过滤出所需的字符:

  String source = "Hello there(hello#)"; // "Hellotherehello" String result = new String(source .Where(ch => Char.IsLetterOrDigit(ch)) .ToArray()); 

要么

  String result = String.Concat(source .Where(ch => Char.IsLetterOrDigit(ch))); 

所以你不需要正则expression式

或者你也可以这样做:

  public static string RemoveNonAlphanumeric(string text) { StringBuilder sb = new StringBuilder(text.Length); for (int i = 0; i < text.Length; i++) { char c = text[i]; if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9') sb.Append(text[i]); } return sb.ToString(); } 

用法:

 string text = SomeClass.RemoveNonAlphanumeric("text LaLa (lol) á ñ $ 123 ٠١٢٣٤"); //text: textLaLalol123 

上面的错误是使用replace不正确(它不需要正则expression式,感谢CodeInChaos)。

下面的代码应该做什么指定:

 Regex reg = new Regex(@"[^\p{L}\p{N}]+");//Thanks to Tim Pietzcker for regex string regexed = reg.Replace("Hello there(hello#)", ""); 

这给了:

 regexed = "Hellotherehello" 

作为一种扩展方法的替代操作:

 public static class StringExtensions { public static string ReplaceNonAlphanumeric(this string text, char replaceChar) { StringBuilder result = new StringBuilder(text.Length); foreach(char c in text) { if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9') result.Append(c); else result.Append(replaceChar); } return result.ToString(); } } 

并testing:

 [TestFixture] public sealed class StringExtensionsTests { [Test] public void Test() { Assert.AreEqual("text_LaLa__lol________123______", "text LaLa (lol) á ñ $ 123 ٠١٢٣٤".ReplaceNonAlphanumeric('_')); } } 
 var text = "Hello there(hello#)"; var rgx = new Regex("[^a-zA-Z0-9]"); text = rgx.Replace(text, string.Empty); 

使用以下正则expression式使用Regex.Replace去除string中的所有字符

 ([^A-Za-z0-9\s]) 

在.NET 4.0中,您可以使用String类的IsNullOrWhitespace方法来删除所谓的空格字符。 请看这里http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx然而,@CodeInChaos指出,有很多字符可以被视为字母和数字。; 如果您只想查找A-Za-z0-9,则可以使用正则expression式。