使用regex c#在tweet中用word替换表情符号#

时间:2011-12-21 11:02:37

标签: c# regex emoticons

基本上,我们的想法是将字符串中的表情符号映射到实际的单词。为...说,你用快乐取代它。 一个更明确的例子是。 原版的: 今天是阳光灿烂的日子:)。但明天会下雨:(。 最后: 今天是阳光灿烂的日子。但是明天它会下雨悲伤。

我已经尝试使用普通正则表达式为所有表情符号的解决方案,但我不确定一旦你发现它是一个表情符号,如何返回并用适当的单词替换每一个。 我只需要三个表情符号:),:(和:D。谢谢。

4 个答案:

答案 0 :(得分:2)

为什么不使用普通替换?您只有三种固定模式:

str = str.Replace(":(", "text1")
         .Replace(":)", "text2")
         .Replace(":D", "text3")

答案 1 :(得分:1)

使用采用自定义匹配评估程序的Regex.Replace方法。

static string ReplaceSmile(Match m) {
    string x = m.ToString();
    if (x.Equals(":)")) {
        return "happy";
    } else if (x.Equals(":(")) {
        return "sad";
    }
    return x;
}

static void Main() {
    string text = "Today is a sunny day :). But tomorrow it is going to rain :(";
    Regex rx = new Regex(@":[()]");
    string result = rx.Replace(text, new MatchEvaluator(ReplaceSmile));
    System.Console.WriteLine("result=[" + result + "]");
}

答案 2 :(得分:1)

更通用的解决方案:

var emoticons = new Dictionary<string, string>{ {":)", "happy"}, {":(", "sad"} };
string result = ":) bla :(";
foreach (var emoticon in emoticons)
{
    result = result.Replace(emoticon.Key, emoticon.Value);
}

对于需要替换的任何其他表情符号,只需在字典中添加另一个键值对,例如{":D", "laughing"}

作为foreach-loop的替代方法,也可以(尽管不一定推荐)使用Aggregate标准查询运算符:

string result = emoticons.Aggregate(":) bla :(",
                (text, emoticon) => text.Replace(emoticon.Key, emoticon.Value));

答案 3 :(得分:0)

为何选择正则表达式?

 string newTweet = oldTweet
  .Replace(":)","happy")
  .Replace(":(","sad")
  .Replace(":D","even more happy");