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

3

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

string str = "Hello world ☀⛿"; 
string result = Regex.Replace(str, @"\p{Cs}", "");

那个正则表达式是用来做什么的?它看起来对你的目的完全没有用处。 - Andrew
1
我认为这个解决方案是盲目地从https://dev59.com/o14c5IYBdhLWcg3wVpLw#28025891中获取的。 - Wiktor Stribiżew
哦,如果Jon Skeet这么建议的话,那一定是可行的。我刚刚在一个不支持此功能的在线正则表达式页面上尝试了一下。 - Andrew
@WiktorStribiżew 如果您测试并分享链接,那将很好,因为它的链接并不能解决这个问题,您可以进行测试。 - asa
1
@asa:我无法测试任何东西,因为您尚未发布要求。对于您来说,什么是表情符号?您需要涵盖哪些Unicode范围? - Wiktor Stribiżew
显示剩余2条评论
1个回答

6

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

string text = "Hello world ☀⛿END";

Console.WriteLine(text);
Console.WriteLine(Regex.Replace(text, @"\p{Cs}", ""));
Console.WriteLine(Regex.Replace(text, @"[^\u0000-\u007F]+", ""));
Console.WriteLine(text.Where(c => !Char.IsSurrogate(c)).ToArray());

这是结果:
Hello world ??????END
Hello world ??END
Hello world END
Hello world ??END

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

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


3
Regex.Replace(str, @"[^\u0000-\u007F]+", ""); 这段代码是有效的,谢谢。 - asa
3
然而,它不仅匹配“表情符号”,还会删除斯拉夫字母和其他内容。 - Wiktor Stribiżew
2
没错。我猜@asa只需要去掉奇怪的字符,不需要做任何特殊处理。对吗? - Andrew

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