检查字符并将表情符号转换为文本?c#

本文关键字:转换 文本 符号 字符 检查 | 更新日期: 2023-09-27 18:00:33

我在数据库中有一个表情符号列表,就像这个

id | emoticon | convert_text
1  |   :)     |  e_happy
2  |   :(     |  e_sad

等等。

如何检查表情符号列表中是否包含任何字符?

如果找到,请将表情符号更改为文本。

示例:

before
S = Smile at everyone who doesn't smile at your :)
after
S= Smile at everyone who doesn't smile at your e_happy

*已编辑

首先,我试着像一样拆分每个单词

static void Main(string[] args)
    {
        string value = "Smile at everyone who doesn't smile at your :)";
        char[] delimiter = new char[] { ' ', ',', '.' };
        string[] array = value.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
        foreach (string entry in array)
        {
            Console.WriteLine(entry);
        }
        Console.ReadKey();
    }

我很困惑如何用数据库中的表情符号列表检查每个单词,并将表情符号转换为文本,如示例所示*对不起,这是我的第一篇文章,我正在用谷歌翻译

检查字符并将表情符号转换为文本?c#

由于表情符号的数量和符号可能非常大且非常随机(like :) ;) >:) @}-, etc; and then new can be added anytime),我认为正则表达式不能用于所有表情符号。所以我想用一种更详细的方式来处理这个问题。

  1. 将所有表情符号加载到一个字典中,该字典包含表情符号作为键和convert_text作为值(只需确保该键不重复,否则会出现异常)
  2. 为每个表情符号键做一个foreach,并将其替换为文本

声明字典

Dictionary<string, string> emoticons = new Dictionary<string, string>();

将表情符号加载到字典中(使用DataReader)

// declare/open the connection (depends on the current application design
string sql = "SELECT * FROM Emoticons
// cmd.ExecuteReader above query to get dataReader (dr)
while(dr.Read())
{
    string key = dr.GetString(dr.GetOrdinal("Emoticons"));
    if(!emoticons.ContainsKey(key))
        emoticons.Add(key, dr.GetString(dr.GetOrdinal("convert_test"));
}
dr.Close();

上述字典可以存储为类级对象或项目级全局对象,这样您就不需要每次都读取数据库

用convert_text替换所有表情符号

foreach(string key in emoticons.Keys)
   value = value.Replace(key, emoticons[key]);
// here you will have all emoticons converted with their convert_text.

使用正则表达式怎么样?

var emoticons = new Dictionary<string, string>
{
    { ":)" , "smile" },
    { ";)" , "blink" },
    { ">:)", "devil" },
    { "@}-", "rose"  }
};
string value = "Smile at everyone who doesn't smile at your :)";
Console.WriteLine(Regex.Replace(value, 
    String.Join("|",emoticons.Select(e => Regex.Escape(e.Key)).ToArray()), 
    (match) =>
    {
        string result = null;
        return emoticons.TryGetValue(match.Value, out result) 
            ? result : match.Value;
    }));

通过使用regexp,您可以通过使用相同的表达式来匹配:):],如果您已经在数据库中正确地转义了它们的话。在这个示例中,我认为所有表达式都是"不安全的",所以我使用Regex.Escape调用