从字符串中删除额外的文字和标点符号只保留表情符号?

时间:2013-04-15 19:45:07

标签: c# regex emoticons

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

  

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

     

输出 :D :):P :(

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

  
    

Regex =“[A-Za-z] |:[D(P(]”

  

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

2 个答案:

答案 0 :(得分:2)

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

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

它由两部分组成:

  1. ((?<!:)[^:]) | (:(?![PD\(\)]))
  2. [^:]*
  3. 第一部分是使用Negative Lookahead and Lookbehind的OR(|)语句。它通过查找:

    找到一个不包含笑脸的文本块中的第一个字符

    一个显然不是笑脸的角色:

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

      1. 冒号:
      2. 这不是一个笑脸的后半部分的角色:(?![PD\(\)]))
      3. 第二部分([^:]*)继续观察,直到我们发现潜在笑脸(冒号)的开始。

        此正则表达式目前只找到以下表情符号:

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

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

        总结一下,这个正则表达式应该找到一些不是笑脸的东西。你可以简单地在Regex变量中声明它,然后调用.Replace(string input, string replacement),传入你的输入字符串和想要用(String.Empty在这种情况下替换非笑脸字符的字符串)

答案 1 :(得分: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");