如何从字符串中删除非 ASCII - C#

asa*_*asa 3 c# regex emoji

我想从字符串中删除表情符号,但它不起作用

\n\n
string str = "Hello world \xe2\x98\x80\xe2\x9b\xbf"; \nstring result = Regex.Replace(str, @"\\p{Cs}", "");\n
Run Code Online (Sandbox Code Playgroud)\n

And*_*rew 6

我比较了我发现/想到的几个选项:

\n\n
string text = "Hello world \xe2\x98\x80\xe2\x9b\xbfEND";\n\nConsole.WriteLine(text);\nConsole.WriteLine(Regex.Replace(text, @"\\p{Cs}", ""));\nConsole.WriteLine(Regex.Replace(text, @"[^\\u0000-\\u007F]+", ""));\nConsole.WriteLine(text.Where(c => !Char.IsSurrogate(c)).ToArray());\n
Run Code Online (Sandbox Code Playgroud)\n\n

这就是结果:

\n\n
Hello world ??????END\nHello world ??END\nHello world END\nHello world ??END\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不确定您的输入字符串在复制、粘贴到此处、再次复制并粘贴到 Visual Studio 后是否会在此过程中进行一些修改,但从我所看到的来看,显然第二个选项似乎效果更好。

\n\n

您想删除所有特殊字符还是仅删除表情符号

\n

  • Regex.Replace(str, @"[^\u0000-\u007F]+", ""); 作品和感谢 (3认同)
  • 然而,它不仅匹配“表情符号”,还会删除西里尔字母等等。 (3认同)
  • 确切地。我的猜测是@asa只需要删除*奇怪的*字符并且不需要任何特别的东西。是对的吗? (2认同)