检查字符并将表情符号转换为文本?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();
}
我很困惑如何用数据库中的表情符号列表检查每个单词,并将表情符号转换为文本,如示例所示*对不起,这是我的第一篇文章,我正在用谷歌翻译
由于表情符号的数量和符号可能非常大且非常随机(like :) ;) >:) @}-, etc; and then new can be added anytime
),我认为正则表达式不能用于所有表情符号。所以我想用一种更详细的方式来处理这个问题。
- 将所有表情符号加载到一个字典中,该字典包含表情符号作为键和convert_text作为值(只需确保该键不重复,否则会出现异常)
- 为每个表情符号键做一个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
调用