Twitter API返回一个实体列表,其中包含指示实体在推文文本中开始和结束的开始/结束索引。
当推文文本包含表情符号时,对于文本中的每个表情符号,这些索引都会偏离1。推文文本中的每个表情符号都包含两个unicode字符(\ud83d\udc4c
)。我的假设是,在C#中,这些被计为两个字符而不是一个,这使得所有索引都关闭(并且越来越多地取决于表情符号的数量)。
所以我查看了twemoji这是Twitter的官方表情符号库。这是使用正则表达式(see twemoji JS code)在文本中查找表情符号。我将这个正则表达式复制到我的代码中,用一个字符替换表情符号(稍后由图像替换,但现在X
就足够了)。我复制模式,转义所有反斜杠,从开头删除/
,从结尾删除/g
。 C#然后很乐意接受正则表达式,我可以使用此代码将所有表情符号替换为X
:
string strippedText = Regex.Replace(text, emojiRegex, "X");
然而,有些推文似乎包含了emojis而不是(还有?)支持的twemoji,例如\ud83c\udffb
,这导致我的剥离不会剥离所有内容和索引再次关闭。
我如何找到任何不受支持的表情符号并将其除去?有没有我可以使用的通用正则表达式,或者还有其他(和更好的)正则表达式'那里有更多的表情符号?
或者甚至更好,有没有办法让C#理解包含表情符号的字符串只将它们视为一个字符而不是两个?