如何将表情符号与R正则表达式匹配?
我想确定我的矢量的元素包含的表情符号:如何将表情符号与R正则表达式匹配?
x = c('', 'no', '', '', 'no', '', '䨺', '감사')
x
# [1] "\U0001f602" "no" "\U0001f379" "\U0001f600" "no" "\U0001f61b" "䨺" "감사"
相关职位只包括其他语言,因为他们大多是指专业图书馆,我无法想出一个办法来转换为R:
- What is the regex to extract all the emojis from a string?
- How do I remove emoji from string
- replace emoji unicode symbol using regexp in javascript
- Regular expression matching emoji in Mac OS X/iOS
- remove unicode emoji using re in python
第二个看起来非常有前途的,但很可惜(不提供perl = TRUE
固定):
x[grepl('[\u{1F600}-\u{1F6FF}]', x)]
Error: invalid \u{xxxx} sequence (line 1)
类似的问题与其他问题来的。我们如何在R中匹配表情符号?
我的编码转换为UTF-8的表情符号价值的UTF-8值与remoji
库,它是UTF-8的所有表情符号的值进行比较。我正在使用stringr
库来查找矢量中表情符号的位置。一个可以自由使用grep或任何其他功能。
第1种方法:
library(stringr)
xvect = c('', 'no', '', '', 'no', '')
Encoding(xvect) <- "UTF-8"
which(str_detect(xvect,"[^[:ascii:]]")==T)
# [1] 1 3 4 6
这里1,3,4和6的表情符号在这种情况下字符。
编辑:
第2种方法: 安装使用使用以下命令devtools叫remoji
包,因为我们已经转换表情符号物品进入UTF -8。我们现在可以比较表情符号库中存在的所有表情符号的UTF- 值。使用trimws
去除空格
install.packages("devtools")
devtools::install_github("richfitz/remoji")
library(remoji)
emj <- emoji(list_emoji(), TRUE)
xvect %in% trimws(emj)
输出:
which(xvect %in% trimws(emo))
# [1] 1 3 4 6
上述两种方法都没有充分证明和第一方法假定没有比在矢量表情符号以外的任何ASCII字符并且第二种方法依赖于图书馆信息remoji
。如果库中没有某个表情符号信息,则最后一条命令可能会生成FALSE而不是TRUE。
最终编辑:
作为每OP之间的讨论(@MichaelChirico)和@SymbolixAU。由于他们两人似乎是小写字母U的错误的问题。新的正则表达式是xvect[grepl('[\U{1F300}-\U{1F6FF}]', xvect)]
。角色等级范围从F300到F6FF。在表情符号位于此范围之外的情况下,可以将该范围改变为新的范围。这可能不是完整的列表,并且在这段时间内这些范围可能会不断增加/变化。
这是一个很好的建议,但在我的矢量中有非_many_非ASCII字符,它们不是表情符号。我更新了我的帖子以反映这一点。 – MichaelChirico
@MichaelChirico是的我知道上述两种方法都有一定的局限性,我也试图找出在R.Strange中是否有更好的选择,即使在添加了新的字符后,上述两个命令都给出了正确的结果。我不知道为什么 – PKumar
评论中的错字纠正和扩展版本似乎做得相当不错:'x [grepl('[\ u {1F300} - \ u {1F6FF}]',x)]' – MichaelChirico
资本U? (3去) – SymbolixAU
@SymbolixAU哦,我的!那么这是令人尴尬的orz – MichaelChirico
你还想要缩小范围来捕捉'饮料'表情符号:) – SymbolixAU