如何从字符串中删除表情符号 [英] How do I remove emoji from string
本文介绍了如何从字符串中删除表情符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的问题是使用正则表达式从字符串中删除emoji,而不是从字符串中删除CJK(中文、日语、韩语)字符。我尝试使用此正则表达式:
REGEX = /[^u1F600-u1F6FFs]/i
这个正则表达式工作得很好,只是它还可以检测我需要的中文、日文和韩文字符。你知道如何解决这个问题吗?
推荐答案
Karol S已提供a solution,但原因可能不清楚:
"u1F600"
实际上是"u1F60"
后跟"0"
:
"u1F60" # => "ὠ"
"u1F600" # => "ὠ0"
您必须对FFFF上的代码点使用大括号:
"u{1F600}" #=> "😀"
因此,字符类[u1F600-u1F6FF]
被解释为[u1F60 0-u1F6F F]
,即
匹配"u1F60"
,范围"0"
.."u1F6F"
和"F"
。
使用大括号可以解决此问题:
/[u{1F600}-u{1F6FF}]/
这与以下Unicode块中的(表情符号)字符匹配:
- U+1F600..U+1F64FEmoticons
- U+1F650..U+1F67FOrnamental Dingbats
- U+1F680..U+1F6FFTransport and Map Symbols
您还可以使用unpack
、pack
和between?
来获得类似的结果。这也适用于Ruby 1.8.7,它不支持正则表达式中的Unicode。
s = 'Hi!😀'
#=> "Hi!360237230200"
s.unpack('U*').reject{ |e| e.between?(0x1F600, 0x1F6FF) }.pack('U*')
#=> "Hi!"
关于您的Rubular example-Emoji为单字符:
"😀".length #=> 1
"😀".chars #=> ["😀"]
而kaomoji是多个字符的组合:
"^_^".length #=> 3
"^_^".chars #=> ["^", "_", "^"]
匹配这些内容是一项非常不同的任务(您应该在一个单独的问题中提问)。
这篇关于如何从字符串中删除表情符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文