Замените смайлик на слово в твите, используя регулярное выражение c # - PullRequest
1 голос
/ 21 декабря 2011

По сути, идея состоит в том, чтобы сопоставить смайлики в строке с реальными словами. скажем за :) ты заменишь его на счастливый. Более наглядным примером будет. Оригинал: Сегодня солнечный день :). Но завтра пойдет дождь :(. Финал: Сегодня солнечный день счастлив. Но завтра пойдет дождь.

Я пытаюсь найти решение, используя общее регулярное выражение для всех смайликов, но я не уверен, как только вы обнаружите, что это смайлик, как вернуться назад и заменить каждое на соответствующее слово. Мне нужно только для трех смайликов :), :( и: D. Спасибо.

Ответы [ 4 ]

2 голосов
/ 21 декабря 2011

Почему бы вам не использовать простую замену? У вас есть только три фиксированных шаблона:

str = str.Replace(":(", "text1")
         .Replace(":)", "text2")
         .Replace(":D", "text3")
1 голос
/ 21 декабря 2011

Более общее решение:

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 также можно (хотя и не обязательно) использовать стандартный оператор запроса Aggregate:

string result = emoticons.Aggregate(":) bla :(",
                (text, emoticon) => text.Replace(emoticon.Key, emoticon.Value));
1 голос
/ 21 декабря 2011

Используйте 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 + "]");
}
0 голосов
/ 21 декабря 2011

Почему регулярное выражение?

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