正则表达式C#:替换除Emojis之外的所有特殊字符

时间:2016-07-18 09:17:07

标签: c# regex

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

  • :)
  • :P
  • :d
  • :(

这就是我现在所拥有的:

RejectChanges()

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

2 个答案:

答案 0 :(得分:1)

您可以使用已知技术:匹配并捕获您需要的内容,并仅匹配您要删除的内容,并替换为第1组的后向引用:

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

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

请参阅regex demo

模式说明

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

答案 1 :(得分:0)

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

fatal error: unexpectedly found nil while unwrapping an Optional value

模式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|)|(]一个或多个