Regex&;C#:替换除表情符号外的所有特殊字符

本文关键字:符号 特殊字符 amp 替换 Regex | 更新日期: 2023-09-27 17:57:30

我需要替换字符串中的所有特殊字符,除了以下字符(包括字母字符)

  • :)
  • :P
  • ;)
  • :D
  • :(

这就是我现在拥有的:

string input = "Hi there!!! :)";
string output = Regex.Replace(input, "[^0-9a-zA-Z]+", "");

这将替换所有特殊字符。我如何修改它以不替换提到的字符(表情符号),而是替换任何其他特殊字符?

Regex&;C#:替换除表情符号外的所有特殊字符

您可以使用一种已知的技术:匹配并捕获您需要的内容,只匹配您想要删除的内容,并替换为对Group 1:的反向引用

(:(?:[D()P])|;'))|[^0-9a-zA-Z's]

替换为$1。注意,我在字符类中添加了's,但如果不需要空格,请将其删除

查看regex演示

模式解释

  • (:(?:[D()P])|;'))-第1组(我们需要保留的内容):
    • :(?:[D()P])-一个:,后跟D()P
    • |-或
    • ;')-一个;)子串
    • (在这里,您可以使用更多|分隔的分支来扩展捕获组)
  • |-或
  • [^0-9a-zA-Z's]-匹配除ASCII数字、字母(和空格之外的任何字符,但正如我所提到的,如果不需要保留空格,您可以删除's

我会使用RegEx来匹配所有表情符号,并从文本中选择它们

string input = "Hi there!!! :)";
string output = string.Concat(Regex.Matches(input, "[;|:][D|P|)|(]+").Cast<Match>().Select(x => x.Value));

图案[;|:][D|P|)|(]+

[;|:]以:或开头;

[D|P|)|(]以D、p结尾)或(

+一个或多个