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

Jam*_*mes 43 .net c# regex asp.net

如何从C#中删除字符串中的非字母数字字符和松散空格?

我想保留az,AZ,0-9等等(甚至不是"空格").

"Hello there(hello#)".Replace(regex-i-want, "");
Run Code Online (Sandbox Code Playgroud)

应该给

"Hellotherehello"
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*ker 59

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

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

应该管用.+通过一次匹配多个连续的非字母数字字符而不是逐个匹配,使正则表达式更有效.

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

@"[^\p{L}\p{N}]+"
Run Code Online (Sandbox Code Playgroud)

离开了

BonjourmesélèvesGutenMorgenliebeSchüler
Run Code Online (Sandbox Code Playgroud)

代替

BonjourmeslvesGutenMorgenliebeSchler
Run Code Online (Sandbox Code Playgroud)


Dmi*_*nko 16

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

  String source = "Hello there(hello#)";

  // "Hellotherehello"
  String result = new String(source
    .Where(ch => Char.IsLetterOrDigit(ch))
    .ToArray());
Run Code Online (Sandbox Code Playgroud)

要么

  String result = String.Concat(source
    .Where(ch => Char.IsLetterOrDigit(ch)));  
Run Code Online (Sandbox Code Playgroud)

所以你不需要正则表达式.

  • LinqPad 中的快速测试表明,这与编译的 Regex 解决方案之间的差异可以忽略不计。可读性对我来说很重要。 (2认同)