【问题标题】:In Swift, how can I detect an "emoji tag"? [duplicate]在 Swift 中,如何检测“表情符号标签”? [复制]
【发布时间】:2016-08-11 22:54:29
【问题描述】:
func getEmojiTags(text: String) -> [String] {
}

表情符号标签是两部分的组合,它们之间没有空格。如果它们之间有空格,则它不是 emojiTag。

  • 一个表情符号
  • 不是表情符号的字符串

例如:

Hello, my name is Jason ???? ???? how are you ?-> []
Hello, my name is ????Jason -> [????Jason]
Hello, my name is ???? Jason -> [] 
I am going to the ⛱beach with some ????monkeys ????  -> [⛱beach, ????monkeys]

【问题讨论】:

  • 如果 Swift 正确处理 unicode,它们应该被视为单个字符,因此您应该能够检查它们是否在几个字符范围之一中。
  • @Blender 那么,范围是多少?我认为,问题是关于这个
  • @MehdiKhademloo:这就是我发表评论而不是答案的原因。它们应该不难找到。

标签: ios regex swift string emoji


【解决方案1】:

尝试将NSRegularExpression 与表情符号代码范围一起使用。

func emojiTags(str: String) -> [String]  {
    //A little bit simplified, you may need to define what are your "emoji".
    //This is a subset defined in http://stackoverflow.com/a/36258684/6541007 .
    let emojiCharacters = "\\U0001F600-\\U0001F64F\\U0001F300-\\U0001F5FF\\U0001F680-\\U0001F6FF\\u2600-\\u26FF"
    let pattern = "[\(emojiCharacters)][^\(emojiCharacters)\\s]+"
    let regex = try! NSRegularExpression(pattern: pattern, options: [])
    let matches = regex.matchesInString(str, options: [], range: NSRange(0..<str.utf16.count))
    return matches.map{(str as NSString).substringWithRange($0.range)}
}
let str1 = "Hello, my name is Jason ? ? how are you ?"
print(emojiTags(str1)) //->[]
let str2 = "Hello, my name is ?Jason"
print(emojiTags(str2)) //->["?Jason"]
let str3 = "Hello, my name is ? Jason"
print(emojiTags(str3)) //->[]
let str4 = "I am going to the ⛱beach with some ?monkeys ?"
print(emojiTags(str4)) //->["⛱beach", "?monkeys"]

【讨论】:

  • 这会检测到所有表情符号吗?如何检测每个表情符号?
  • @TIMEX, "emoji" 没有明确通用的定义。您需要在应用中定义您希望将哪些字符视为表情符号。
  • @TIMEX, This UTR #51 正在尝试提供指定哪些字符被视为表情符号的数据
猜你喜欢
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2018-04-04
相关资源
最近更新 更多