从字符串中删除额外的文本和标点符号,只保留笑脸

本文关键字:标点符号 笑脸 保留 文本 字符串 删除 | 更新日期: 2023-09-27 18:09:12

我使用正则表达式遇到了一些问题。你能帮我一下吗?下面是我想解决的问题

: :,...你今天好吗P .. .:(*

输出 :D:): p:(

基本上我想从输入字符串中删除标点符号和文本,如-(.,:;等),并将其替换为空字符串。但我想保留笑脸-:),:(或:P .我写了下面的代码,但它不工作。

Regex ="[A-Za-z] |: [D (p()"

,但它也删除了":D和:P"斯迈利。

从字符串中删除额外的文本和标点符号,只保留笑脸

下面的正则表达式字符串应该可以为您工作:

(((?<!:)[^:])|(:(?![PD'(')])))[^:]*

它由两部分组成:

  1. ( ((?<!:)[^:]) | (:(?![PD'(')])))
  2. [^:]*

第一部分是一个OR (|)语句,它使用负向前看和向后看。它通过查找

来查找文本块中不包含笑脸符号的第一个字符:

一个明显不在笑脸符号中的字符:

  1. 前面没有冒号的任何字符:(?<!:)
  2. 且不是冒号:[^:]

或者后面没有笑脸字符的冒号:

  1. A冒号:
  2. 后面没有一个字符是笑脸符号的后半部分:(?![PD'(')]))

第二部分([^:]*)继续查找,直到我们找到一个潜在的笑脸符号的开头(冒号)。

这个正则表达式目前只找到以下的笑脸符号:

    D
  • :
  • : P
  • :
  • :)

您可以更新OR语句的后半部分以查找其他笑脸符号。

总的来说,这个正则表达式应该找到所有不属于笑脸符号的内容。您可以简单地在Regex变量中声明它,然后调用.Replace(string input, string replacement),传入您的输入字符串和您想要替换非笑脸字符的字符串(在本例中为String.Empty)。

不那么完美的解决方案:

string text = ":,... :D..:::))How are you today :P?..:(*";
text = text.Replace(":)", "@@@)");
text = text.Replace(":D", "@@@D");
text = text.Replace(":P", "@@@P");
// clean up your punctuation marks here
//
text = text.Replace("@@@)", ":)");
text = text.Replace("@@@D", ":D");
text = text.Replace("@@@P", ":P");