0

我在使用正则表达式时遇到了一些问题。你能帮帮我吗?我要解决的问题中的以下内容-

输入: :,... :D..:::))你今天好吗 :P?..:(*

输出 :D :) :P :(

基本上我想从输入字符串中删除标点符号和文本,如-(.,:; 等),并将它们替换为空字符串。但我想保留表情符号 -:) ,:( 或 :P 。我已经编写了以下代码,但它不起作用。

正则表达式 = "[A-Za-z]|:[D(P(]"

但它也删除了“:D和:P”笑脸。

4

2 回答 2

2

以下正则表达式字符串应该适合您:

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

它由两部分组成:

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

第一部分是|使用Negative Lookahead 和 Lookbehind的 OR() 语句。它通过查找以下任一方法来查找不包含笑脸的文本块中的第一个字符:

一个明显不在笑脸中的角色:

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

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

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

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

此正则表达式当前仅找到以下笑脸:

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

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

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

于 2013-04-16T12:45:19.273 回答
1

不是那么完美的解决方案:

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");
于 2013-04-15T19:54:57.540 回答