我想要检测以#
开头的单词,并返回其特定范围。起初,我尝试使用下面的代码:如何获取特定子串的范围(即使重复)
for word in words {
if word.hasPrefix("#") {
let matchRange = theSentence.range(of: word)
//Do stuff with this word
}
}
这工作得很好,但如果你有一个重复的主题标签,将返回的主题标签中第一次出现的范围。这是因为range(_:)
函数的性质。
说我有以下字符串:
"The range of #hashtag should be different to this #hashtag"
这将返回(13, 8)
两个井号标签的时候,确实它应该返回(13, 8)
以及(50, 8)
。这怎么解决?请注意,emojis也应该能够在哈希标签中被检测到。
编辑
如果你想知道如何做到这一点使用表情符号来,去here
你应该忽略最后发现#和字符串超出最后发现'hastag'所以它会消除最后的位置,你查询应该是'而(theSentence.range(作者:!“#”)=无)' – iphonic
如果你打算使用正则表达式,那么这可能会有所帮助:http://stackoverflow.com/a/27880748/1187415,它正确处理所有Unicodes(Emojis,flags,...)。 –